2014-01-17 7 views

答えて

2

直接ではありません。類似の包含/除外を実装するには@JsonViewまたはJSONフィルタ機能を使用できます。

+0

こんにちは、いくつかの例を教えてください。ありがとうございました。 – Niranjan

+0

Googleはあなたの友人です。あなたはこれを試すことができます:http://www.cowtowncoder.com/blog/archives/2011/02/entry_443.htmlまたはこのhttp://wiki.fasterxml.com/JacksonFeatureJsonFilter – StaxMan

5

Jackson Model Versioning Moduleには、GSONの@Sinceと@Untilのスーパーセットを満たすバージョン対応が追加されています。


あなたはGSON、注釈付きモデル考えてみましょう:

@JsonVersionedModel(currentVersion = '3', toCurrentConverterClass = ToCurrentCarConverter) 
public class Car { 
    public String model; 
    public int year; 
    public boolean used; 
} 

...モジュールを使用して

public class Car { 
    public String model; 
    public int year; 
    @Until(1) public String new; 
    @Since(2) public boolean used; 
} 

を、あなたは以下のジャクソンクラスレベルの注釈に変換することができ...現在のバージョンのコンバータに書き込む:

public class ToCurrentCarConverter implements VersionedModelConverter { 
    @Override 
    public ObjectNode convert(ObjectNode modelData, String modelVersion, 
           String targetModelVersion, JsonNodeFactory nodeFactory) { 

     // model version is an int 
     int version = Integer.parse(modelVersion); 

     // version 1 had a 'new' text field instead of a boolean 'used' field 
     if(version <= 1) 
      modelData.put("used", !Boolean.parseBoolean(modelData.remove("new").asText())); 
    } 
} 

これで、モジュールでJackson ObjectMapperを設定し、テストします。

ObjectMapper mapper = new ObjectMapper().registerModule(new VersioningModule()); 

// version 1 JSON -> POJO 
Car hondaCivic = mapper.readValue(
    "{\"model\": \"honda:civic\", \"year\": 2016, \"new\": \"true\", \"modelVersion\": \"1\"}", 
    Car.class 
) 

// POJO -> version 2 JSON 
System.out.println(mapper.writeValueAsString(hondaCivic)) 
// prints '{"model": "honda:civic", "year": 2016, "used": false, "modelVersion": "2"}' 

免責事項:私は、このモジュールの作者です。追加の機能の例については、GitHubプロジェクトページを参照してください。私はまた、モジュールを使用するためにSpring MVC ResponseBodyAdviseと書いています。

関連する問題