[SPRING] Spring 내에서 알려지지 않은 속성을 무시하도록 Jackson을 어떻게 세계적으로 설정합니까?
SPRINGSpring 내에서 알려지지 않은 속성을 무시하도록 Jackson을 어떻게 세계적으로 설정합니까?
Jackson은 다음을 사용하여 클래스 내에서 알 수없는 속성을 무시하는 주석을 가지고 있습니다.
@JsonIgnoreProperties(ignoreUnknown = true)
이 주석을 사용하여 특정 속성을 무시할 수 있습니다.
@JsonIgnore
전역 적으로 설정하려면 객체 매퍼를 수정할 수 있습니다.
// jackson 1.9 and before
objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// or jackson 2.0
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Spring을 사용하여 이것을 어떻게 전역 적으로 설정합니까? 그래서 추가 클래스를 작성하지 않고 서버 시작시 @Autowired가 될 수 있습니까?
해결법
-
==============================
1.jackson 1.9x 이하에서는 객체 매퍼 공급자로 알 수없는 속성을 무시할 수 있습니다.
jackson 1.9x 이하에서는 객체 매퍼 공급자로 알 수없는 속성을 무시할 수 있습니다.
@Provider @Component public class JerseyObjectMapperProvider implements ContextResolver<ObjectMapper> { @Override public ObjectMapper getContext(Class<?> type) { ObjectMapper result = new ObjectMapper(); result.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); return result; } }
jackson 2.x 이상에서는 객체 매퍼 공급자로 알 수없는 속성을 무시할 수 있습니다.
@Provider @Component public class JerseyObjectMapperProvider implements ContextResolver<ObjectMapper> { @Override public ObjectMapper getContext(Class<?> type) { ObjectMapper result = new ObjectMapper(); result.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); return result; } }
저지 클래스는 Spring에 의해 자동 발견되지 않습니다. 수동으로 등록해야합니다.
public class JerseyConfig extends ResourceConfig { public JerseyConfig() { register(JerseyObjectMapperProvider.class); } }
-
==============================
2.이것은 Spring의 MethodInvokingFactoryBean을 사용하여 달성 할 수있다.
이것은 Spring의 MethodInvokingFactoryBean을 사용하여 달성 할 수있다.
<!-- Jackson Mapper --> <bean id="jacksonObjectMapper" class="org.codehaus.jackson.map.ObjectMapper" /> <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> <property name="targetObject" ref="jacksonObjectMapper" /> <property name="targetMethod" value="configure" /> <property name="arguments"> <list> <value type="org.codehaus.jackson.map.DeserializationConfig.Feature">FAIL_ON_UNKNOWN_PROPERTIES</value> <value>false</value> </list> </property> </bean>
다음과 같이 RestTemplate에 유선 연결될 수 있습니다.
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate"> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="objectMapper" ref="jacksonObjectMapper" /> </bean> </list> </property> </bean>
또한 Spring MVC와 함께 사용하기 위해 메시지 변환기에 직접 삽입 할 수도있다.
<mvc:annotation-driven> <mvc:message-converters> <!-- Jackson converter for HTTP messages --> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="objectMapper" ref="jacksonObjectMapper" /> </bean> </mvc:message-converters> </mvc:annotation-driven>
-
==============================
3.최신 Jackson 버전 (2.x)에는 몇 가지 변경 사항이 있습니다.
최신 Jackson 버전 (2.x)에는 몇 가지 변경 사항이 있습니다.
<!-- Jackson Mapper --> <bean id="jacksonObjectMapper" class="com.fasterxml.jackson.databind.ObjectMapper" /> <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> <property name="targetObject" ref="jacksonObjectMapper" /> <property name="targetMethod" value="configure" /> <property name="arguments"> <list> <value type="com.fasterxml.jackson.databind.DeserializationFeature">FAIL_ON_UNKNOWN_PROPERTIES</value> <value>false</value> </list> </property> </bean>
from https://stackoverflow.com/questions/14343477/how-do-you-globally-set-jackson-to-ignore-unknown-properties-within-spring by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] DispatcherServlet이 다른 응용 프로그램 컨텍스트를 만드는 이유는 무엇입니까? (0) | 2018.12.08 |
---|---|
[SPRING] "NoClassDefFoundError : 클래스를 초기화 할 수 없습니다"오류 (0) | 2018.12.08 |
[SPRING] Spring에서 조롱 된 JNDI 데이터 소스를 테스트하는 방법은 무엇입니까? (0) | 2018.12.08 |
[SPRING] junit 테스트 클래스 전체에서 스프링 응용 프로그램 컨텍스트 재사용 (0) | 2018.12.08 |
[SPRING] 데이터 읽기를위한 데이터베이스 트랜잭션이 필요합니까? (0) | 2018.12.08 |