2017-03-31 1 views
0

은 가정하자 나는이 개 수업을 , (예 : new ObjectMapper().writerWithView(ADifferentView.class).writeValueAsString(new Duper())), 나는 얻을 것이라고 기대한다.잭슨 : 슈퍼 클래스에 @JsonProperty & @JsonView에 의해 숨겨진 하위 클래스 속성은

{ 
    "name": "John Smith" 
} 

나는 대신 아무것도 얻지 않는다. . 이것은 슈퍼 클래스의 "name"속성이 먼저 선택 되었기 때문에 Jackson은 특정보기로 인해이를 무시합니다.

이것은 버그입니까?

그렇지 않은 경우이 문제를 해결하거나 적어도이를 감지하거나 경고를받을 수있는 방법이 있습니까?

답변

0

음, 어떤 버전의 Jackson을 사용하고 있습니까? 어쨌든, 난 그냥 당신이 당신의 getName() 서브 클래스에서 방법, 당신이 의지에 @JsonView을 넣으면

{"name":"super name"} 

결과 (잭슨 1)이 코드

ObjectMapper mapper = new ObjectMapper(); 

String json = mapper.writeValueAsString(new Duper()); 

System.out.println(json); 

시도 네가 원하는 걸 얻으 라.

@JsonView(SpecialCaseView.class) 
public String getName() { 
    return name; 
} 

결과

{"name":"John Smith"} 
+0

잭슨 2.7.3. 그리고 몇 가지 다른 견해 중 하나를 사용하여 연재 중입니다. Duper의 "이름"이 모두에게 나타나기를 바랍니다. (이상적으로 부모 -보기를 만들 필요없이 ...) –

+0

나는 당신의 전망이 SpecialCaseView를 서브 클래스로 만들었을 때만 효과가 있다고 믿는다. –

+0

오른쪽. 파머. 감사. –

관련 문제