2016-07-29 7 views
0

を受け入れるプロパティは、私はPOJOを持っている:ジャクソン:任意のJSON

public class A { 

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

iは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。もう1つの質問はリストにデシリアライズすることです。デシリアライズせずにStringが必要です – piotrek

答えて

3

@JsonRawValueはシリアル化のためにのみ機能します。

StringフィールドをObjectに変更しても問題ありません。

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; 
関連する問題