@JsonFilter 주석이 런타임에 사용되는시기를 선택적으로 결정할 수 있습니까?@JsonFilter throw "JsonMappingException : BeanPropertyFilter를 해결할 수 없습니다"
필터를 제공하지 않을 때 JsonMappingException 예외가 발생합니다 (아래 참조).
배경 :
가 나는 동적으로 빈 속성 직렬화하기 필터링 @JsonFilter를 사용할 수있는 recent StackOverflow post에서 배웠습니다. 이것은 잘 작동합니다.
// shortened for brevity
FilterProvider filters = new SimpleFilterProvider().addFilter("apiFilter", SimpleBeanPropertyFilter.filterOutAllExcept(filterProperties));
return mapper.filteredWriter(filters).writeValueAsString(user);
문제 : 내 도메인 클래스에 내 JAX-RS 서비스에서이 코드를합니다 (CXF 구현을 사용)의 추가로 @JsonFilter("apiFilter")
를 추가 한 후, 동적으로 내 편안하고 API에 의해 반환되는 속성을 필터링 할 수 있어요 필터를 전혀 적용하지 않으려는 다른 서비스 호출이있는 것입니까? 이 경우 모든 속성을 필터링하지 않고 전체 도메인 클래스를 반환하려고합니다.
Caused by: org.codehaus.jackson.map.JsonMappingException: Can not resolve BeanPropertyFilter with id 'apiFilter'; no FilterProvider configured
at org.codehaus.jackson.map.ser.BeanSerializer.findFilter(BeanSerializer.java:252)
at org.codehaus.jackson.map.ser.BeanSerializer.serializeFieldsFiltered(BeanSerializer.java:216)
at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:140)
편집 한 예제에서 모든 jax-rs 서비스 호출에서 호출 할 작성기 메소드를 확인하는 코드를 포함해야합니까? 일부 서비스 메소드에서는 String이 아닌 실제 User 객체를 반환합니다. 많은 의견을 보내 주셔서 감사합니다! – Justin
좋아, 나는 그것을 시험해 볼 기회가 있었다. 당신이 제안한 "속임수"는 작동하지만 두 번째 "청결한"제안은 작동하지 않습니다. 이 경우 나는 여전히 "No FilterProvider configured"오류를 수신합니다. 다시 한 번 감사드립니다. – Justin
@ Justin : 글쎄, IMO는 문제를 해결하는 "더러운"해결 방법이 작동하지 않는 "깨끗한"방법보다 낫습니다. :) 희망을 당신의 문제를 해결하는 데 도움이. –