2016-07-29 54 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;