2014-04-14 5 views
2

@JsonTypeIdResolver을 사용하여 출력에 사용자 정의 유형 필드를 추가하는 클래스가 있습니다. 이 코드는 예상대로 작동했습니다. 이제 매퍼 객체에 PropertyFilter을 추가했습니다. 이것은 @JsonTypeIdResolver이 작동을 멈춘 곳입니다. 공장이 더 이상 호출되지 않습니다.Jackson 사용자 정의 유형 정보가 작동하지 않습니다.

근무 코드 :

ObjectMapper mapper = new ObjectMapper(); 
mapper.writeValue(outputStream,myObject); 

하지 작업 코드 : 필터 그냥 쓸모가

ObjectMapper mapper = new ObjectMapper(); 
PropertyFilter myfilter=new SimpleBeanFilter() { 
    protected boolean include(BeanPropertyWriter writer) { 
     return true; 
    } 
    protected boolean include(PropertyWriter writer) { 
     return true; 
    } 
} 
FilterProvider filters=new SimpleFilterProvider().addFilter("myFilter",myFilter); 
mapper.writer(filter).writeValue(outputStream,myObject); 

으로 출력은 동일해야합니다 (무엇이든 받아 들인다). 왜 내 형식 필드가 더 이상 직렬화되지 않습니다?

+0

어떤 버전의 Jackson? – fge

+0

버전 2.3.2를 사용합니다 – gorootde

+0

직렬화하려는 클래스의 코드를 공유 할 수 있습니까? – fge

답변

0

잭슨처럼 상속을 제대로 처리하지 못하는 것 같습니다. 내가 명시 적으로 직렬화하기 전에 BaseChildAChildB 캐스트 사용자 지정 serializer를 작성하면 내 테스트 설정은 예상대로 작동

@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = As.PROPERTY, property = "_type") 
abstract class Base { 
    String somefield; 
    ... 
} 

class ChildA extends Base { 
    ... 
} 

class ChildB extends Base { 
    ... 
} 

같았다. 그래서 근본적인 문제는 잭슨이 명시 적으로 그렇게하도록 지시하지 않으면 부모 객체에 대한 주석을 인식하지 못한다는 것입니다.

+0

'@ JsonSubTypes'을 포함하지 않았습니까? – fge

관련 문제