2013-08-19 43 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)。