找不到非具体Map类型的反序列化器[map type; class javax.ws.rs.core.MultivaluedMap [英] Can not find a deserializer for non-concrete Map type [map type; class javax.ws.rs.core.MultivaluedMap

查看:236
本文介绍了找不到非具体Map类型的反序列化器[map type; class javax.ws.rs.core.MultivaluedMap的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在使用org.codehaus.jackson.map.ObjectMapper进行反序列化时遇到以下问题,该问题对以下类不起作用。我不确定我使用的MultivaluedMap出了什么问题。

I'm having the following issue in Deserialization with org.codehaus.jackson.map.ObjectMapper that does not work for the following class. I'm not sure what is going wrong with the MultivaluedMap I'm using.

 public class ClassD
 {
    private ClassA objA;
    private ClassB objB;
    private final ClassC objC;
    private MultivaluedMap<String, String> headerMap;
 }

public static void main(String[] args) {
    String fileName = "someFilePath";
    mockCollection = fromJSON(new TypeReference<Collection<ClassD>>() {}, new String(Files.readAllBytes(Paths.get(fileName)), StandardCharsets.UTF_8));
}

public static <T> T fromJSON(final TypeReference<T> type, final String jsonPacket) throws JsonParseException, JsonMappingException, IOException {
       T data = null;
       ObjectMapper om = new ObjectMapper();
       om.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
       data = om.readValue(jsonPacket, type);
       return data;
    }


Exception : 
org.codehaus.jackson.map.JsonMappingException: Can not find a deserializer for non-concrete Map type [map type; class javax.ws.rs.core.MultivaluedMap, [simple type, class java.lang.String] -> [collection type; class java.util.List, contains [simple type, class java.lang.String]]]
    at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCache2(StdDeserializerProvider.java:315)
    at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCacheValueDeserializer(StdDeserializerProvider.java:290)
    at org.codehaus.jackson.map.deser.StdDeserializerProvider.findValueDeserializer(StdDeserializerProvider.java:159)
    at org.codehaus.jackson.map.deser.std.StdDeserializer.findDeserializer(StdDeserializer.java:620)
    at org.codehaus.jackson.map.deser.BeanDeserializer.resolve(BeanDeserializer.java:379)
    at org.codehaus.jackson.map.deser.StdDeserializerProvider._resolveDeserializer(StdDeserializerProvider.java:407)
    at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCache2(StdDeserializerProvider.java:352)
    at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCacheValueDeserializer(StdDeserializerProvider.java:290)
    at org.codehaus.jackson.map.deser.StdDeserializerProvider.findValueDeserializer(StdDeserializerProvider.java:159)
    at org.codehaus.jackson.map.deser.BasicDeserializerFactory.createCollectionDeserializer(BasicDeserializerFactory.java:284)
    at org.codehaus.jackson.map.deser.StdDeserializerProvider._createDeserializer(StdDeserializerProvider.java:389)
    at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCache2(StdDeserializerProvider.java:310)
    at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCacheValueDeserializer(StdDeserializerProvider.java:290)
    at org.codehaus.jackson.map.deser.StdDeserializerProvider.findValueDeserializer(StdDeserializerProvider.java:159)
    at org.codehaus.jackson.map.deser.StdDeserializerProvider.findTypedValueDeserializer(StdDeserializerProvider.java:180)
    at org.codehaus.jackson.map.ObjectMapper._findRootDeserializer(ObjectMapper.java:2829)
    at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2728)
    at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1870)


推荐答案

在人们面临同样的问题时发布答案。您可以使用此工具来解决您的问题

Posting the answer as people are facing the same issue. You can use this util to solve your issue

public static <T> T deserializeJson(final String json, final Class<T> clazz) throws JsonParseException, JsonMappingException, IOException {
    ObjectMapper om = new ObjectMapper();
    om.setVisibility(JsonMethod.FIELD, Visibility.ANY);
    om.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    return om.readValue(json, clazz);
}

public static <T> String serializeToJson(final T object) throws JsonGenerationException, JsonMappingException, IOException {
    ObjectMapper om = new ObjectMapper();
    om.setVisibility(JsonMethod.FIELD, Visibility.ANY);
    return om.writeValueAsString(object);
}

这篇关于找不到非具体Map类型的反序列化器[map type; class javax.ws.rs.core.MultivaluedMap的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆