2016-07-29 56 views
0

财产我有一个POJO:杰克逊:接受任何JSON

public class A { 

    public int a; 
    public String anyJson1; 
    public String anyJson2; 
    public String anyJson3; 
} 

我想anyJsonX场接受任何JSON。例如:

{"a":5, "anyJson1":[1,2,3], "anyJson2:4, "anyJson3":{"c":"d"}} 

我试图把@JsonRawValue这些领域,但没有成功

嵌套的例外是com.fasterxml.jackson.databind.JsonMappingException:无法反序列化的java.lang的实例。字符串输出START_OBJECT标记

+0

可能,这可能帮助:http://stackoverflow.com/a/24864724/5819195 –

+0

nope。另一个问题是关于反序列化到列表,我需要一个没有任何反序列化的字符串 – piotrek

回答

3

@JsonRawValue仅适用于序列化。

如果你可以改变字符串字段为对象,你会没事的。

如果你不能,你可以用一个简单的自定义解串器:

public class AnythingToString extends JsonDeserializer<String> { 

    @Override 
    public String deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { 
     TreeNode tree = jp.getCodec().readTree(jp); 
     return tree.toString(); 
    } 
} 

然后在模型中使用它:

public static class A { 

    public A() {} 

    private int a; 
    @JsonDeserialize(using = AnythingToString.class) 
    private String anyJson1; 
    @JsonDeserialize(using = AnythingToString.class) 
    private String anyJson2; 
    @JsonDeserialize(using = AnythingToString.class) 
    private String anyJson3;