2012-01-17 6 views
3

私はいくつかのBeanを持っていて、JSonのコアデータ型を(明示的に)モデリングしています。しかし、Jsonsの読書には余分なデータがあることがあります。Jackson:モデル化されていないフィールドによる例外の回避

余分なフィールドをマップ/リストに詰め込みながら、いくつかのフィールド(たとえば私が知っているもの)に明示的なフィールド名を使用するように、ジャックソンのBeanに注釈を付ける/定義する方法はありますか?

答えて

10

はい、あなたが本当にこのような何か、その後、すべての余分な/認識できないパラメータを保持したいんと仮定すると、そこにある:あなたがDeserializationProblemHandlerの実装を定義することを選択できるパラメータのグローバルな処理を設定するには

public class MyBean { 
    private String field1; 
    private String field2; 
    private Integer field3; 
    private Map <String, Object> unknownParameters ; 

    public MyBean() { 
     super(); 
     unknownParameters = new HashMap<String, Object>(16); 
    } 

    // Getters & Setters here 

    // Handle unknown deserialization parameters 
    @JsonAnySetter 
    protected void handleUnknown(String key, Object value) { 
     unknownParameters.put(key, value); 
    } 
} 

をObjectMapperの設定でグローバルに登録します。あなたが本当に未知のパラメータについてないケアを行う見つけた場合、あなたは、単にそれらを

DeserializationProblemHandler handler = new MyDeserializationProblemHandler(); 
ObjectMapper.getDeserializationConfig().addHandler(handler); 

オフにすることができます。 - パラメータはキー値parirsない場合はどのような

objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false) 
+0

感謝を:@JsonIgnoreProperties(ignoreUnknown =真)と、クラス単位で、またはグローバルObjectMapper構成することにより?つまり、入力がリストの場合はどうなりますか? @JsonAnySetterメソッドの入力パラメータとしてObject []を使用できますか? – jayunit100

+0

nnプリミティブは、キーと値のペアの値として格納できます。唯一の注意点は、マップから後で検索するときにキーの種類を知る必要があることです。 – Perception

+0

これは超クールです。 – rfinz

関連する問題