2013-08-19 2 views
0

serialization 중에 @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"))); 

결과 : 생성자 매개 변수도 @JsonProperty 주석이 때문에 잭슨의 코드에 Accrding

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

이 발생합니다. 잭슨 1.9.5를 사용하고 있습니다.

생성자 매개 변수를 비활성화하고 {"prop":"test"}을 얻을 수있는 방법이 있습니까? 미리 도움을 주셔서 감사합니다!

+1

왜 모든 것을 혼합하고 있습니까? 'value' 속성없이'@ JsonProperty'를 필드 위에두면됩니다. 필드가'prop'라고 불리는 경우, 직렬화되는 방법입니다. –

+0

"혼합"은 올바른 단어가 아닙니다. 나는'@ JsonProperty' 클래스를 가지고 있으며, 기본 이름 지정 전략이 아닌 또 다른'ObjectMapper'를 만들고 싶습니다. – catdog

답변

1

가 직접 주석을 해제 할 수있는 방법은 없지만, 당신이 논리를, 당신이 할 수있는 하위 클래스 JacksonAnnotationIntrospector 미치는 영향을 차단하고 무시하려는 경우 @JsonProperty 주석 (또는 @JsonCreator를) 검색에 사용.

관련 문제