2013-08-19 36 views
0

我試圖覆蓋序列化期間在@JsonProperty中指定的屬性名稱,但在生成的json中同時獲取新的和新的命名屬性。在傑克遜自定義命名策略和@JsonProperty

實體:

class Bean { 

    @JsonProperty("p") 
    String prop; 

    @JsonCreator 
    Bean(@JsonProperty("p") String prop) { 
     this.prop = prop; 
    } 
} 

序列化代碼:在

ObjectMapper mapper = new ObjectMapper(); 
mapper.setPropertyNamingStrategy(new PropertyNamingStrategy() { 
      @Override 
      public String nameForField(MapperConfig<?> config, AnnotatedField field, String defaultName) { 
       return "prop"; 
      } 
     }); 
System.out.println(mapper.writeValueAsString(new Bean("test"))); 

結果:

{"p":"test","prop":"test"} 

Accrding傑克遜的代碼,這種情況是因爲構造函數的參數也與@JsonProperty註解。我正在使用傑克遜1.9.5。

有沒有辦法可以禁用構造函數參數並獲得{"prop":"test"}? 感謝您的幫助!

+1

你爲什麼要混合一切?只需將'@ JsonProperty'放在字段上,而不需要'value'屬性。如果該字段被稱爲'prop',那麼它將被序列化。 –

+0

「混合」不是一個正確的詞。我有'@ JsonProperty'類,並希望創建另一個'ObjectMapper',使用非默認命名策略。 – catdog

回答

1

沒有辦法直接禁用註釋,但如果你想阻止他們的效果,可以子類JacksonAnnotationIntrospector,並重寫邏輯用於查找@JsonProperty註釋(或@JsonCreator)。