我正在尝试使用Jackson反序列化一个Map<Long, List>
,但在调用反序列化方法时遇到了编译时错误。我使用的映射器是com.fasterxml.jackson.databind.ObjectMapper
。下面我提供了映射器初始化的代码、反序列化方法、引发编译错误的JUnit测试案例以及实际错误信息。
映射器初始化
// ObjectMapper 初始化
public static final ObjectMapper objectMapper = JsonMapper.builder()
.addModule(new JavaTimeModule())
.addModule(new SimpleModule()
.addAbstractTypeMapping(Claims.class, DefaultClaims.class)
.addAbstractTypeMapping(GrantedAuthority.class, SimpleGrantedAuthority.class)
)
.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
.addMixIn(PersonTraits.class, PersonTraitsMixIn.class)
.addMixIn(SimpleGrantedAuthority.class, SimpleGrantedAuthorityMixin.class)
.build();
反序列化方法
public static <K, V, T extends Map<?, ?>> Map<K, List<V>> deserializeMap(String genericObject,
Class<T> mapClass,
Class<K> keyClass,
Class<List<V>> valueClass)
throws Exception {
if (genericObject == null) {
return null;
}
try {
return objectMapper.readValue(genericObject,
objectMapper.getTypeFactory().constructMapType(mapClass, keyClass, valueClass));
} catch (JsonProcessingException e) {
// 处理异常
throw e;
}
}
JUnit 测试案例
@Test
public void testDeserializeMapContainingListAsValue() throws Exception {
// 准备数据
Map<Long, List<Long>> mapToSerialize = new HashMap<>();
List<Long> valueList = new ArrayList<>();
valueList.add(2L);
mapToSerialize.put(1L, valueList);
String serializedMap = SerializationUtil.serializeObject(mapToSerialize);
// 尝试反序列化
final Map<Long, List<Long>> result = SerializationUtil.deserializeMap(serializedMap,
HashMap.class,
Long.class,
List.class); // 这里出现编译错误
// 验证结果
assertNotNull(result);
}
编译错误信息
在尝试反序列化的行中出现了错误,错误提示大致是:
所需类型 提供类型
mapClass: Class<T> Class<HashMap>
keyClass: Class<K> Class<Long>
valueClass: Class<List<V>> Class<List>
原因: 不兼容的等式约束:List<V> 和 List
有没有人知道这是怎么回事,以及如何修复它?如果我忽略了代码中显而易见的问题,请原谅我,因为我还是编程新手。任何帮助都将非常感激。
谢谢大家,保重!