[SPRING] @JsonIgnoreProperties (ignoreUnknown = false)가 Spring 4.2.0 및 상위 버전에서 작동하지 않습니다.
SPRING@JsonIgnoreProperties (ignoreUnknown = false)가 Spring 4.2.0 및 상위 버전에서 작동하지 않습니다.
@JsonIgnoreProperties (ignoreUnknown = false)는 스프링 4.2.0 및 스프링의 상위 버전에서 작동하지 않습니다. 그러나 4.0.4 및 4.0.1에서 작동합니다. 스프링 4.2.8을 사용하고 있으며 잭슨 의존성이 사용됩니다.
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.6.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.6.3</version>
</dependency>
잘못된 필드가있는 json 요청을 보내면 올바른 요청으로 받아들입니다. 그러나 그것은 나쁜 요청을 응답으로 제공해야합니다. 예를 들면 : 수업을 받으면
public class Student{
private String id;
private String name;
}
유효한 해당 json 요청을 보내면 다음과 같아야합니다.
{
"id": "123",
"name": "test"
}
하지만 아래처럼 잘못된 필드가있는 json 요청을 보내더라도 여전히 받아들입니다.
{
"id": "123",
"name": "test",
"anyinvalidkey": "test"
}
하지만 응답으로 잘못된 요청을 제공해야합니다.
해결법
-
==============================
1.Aarya의 대답을 기반으로 한 주석 기반 솔루션은 다음과 같은 방식으로 수행 할 수 있습니다.
Aarya의 대답을 기반으로 한 주석 기반 솔루션은 다음과 같은 방식으로 수행 할 수 있습니다.
@Configuration public class Config implements InitializingBean { @Autowired private RequestMappingHandlerAdapter converter; @Override public void afterPropertiesSet() throws Exception { configureJacksonToFailOnUnknownProperties(); } private void configureJacksonToFailOnUnknownProperties() { MappingJackson2HttpMessageConverter httpMessageConverter = converter.getMessageConverters().stream() .filter(mc -> mc.getClass().equals(MappingJackson2HttpMessageConverter.class)) .map(mc -> (MappingJackson2HttpMessageConverter)mc) .findFirst() .get(); httpMessageConverter.getObjectMapper().enable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); } }
-
==============================
2.간편한 주석 기반 솔루션. @Configuration에서 :
간편한 주석 기반 솔루션. @Configuration에서 :
@Bean @Primary public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) { ObjectMapper objectMapper = builder.createXmlMapper(false).build(); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true); return objectMapper; }
-
==============================
3.이것은 이전 버전의 Spring에서 제공 한 HttpMessageConverter가 ObjectMapper 기본 구성을 사용했기 때문에 발생합니다. 그러나 최신 버전의 스프링에서는 기본적으로 DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES 속성이 false로 설정된 Jackson2ObjectMapperBulider를 사용합니다. (참조 링크). applicationContext.xml에 다음을 추가하여이 문제를 해결할 수 있습니다.
이것은 이전 버전의 Spring에서 제공 한 HttpMessageConverter가 ObjectMapper 기본 구성을 사용했기 때문에 발생합니다. 그러나 최신 버전의 스프링에서는 기본적으로 DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES 속성이 false로 설정된 Jackson2ObjectMapperBulider를 사용합니다. (참조 링크). applicationContext.xml에 다음을 추가하여이 문제를 해결할 수 있습니다.
<bean id="jacksonObjectMapper" class="com.fasterxml.jackson.databind.ObjectMapper" /> <mvc:annotation-driven content-negotiation-manager="contentNegotiationManager"> <mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper" ref="jacksonObjectMapper" /> </bean> </mvc:message-converters> </mvc:annotation-driven> <bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"> <property name="favorPathExtension" value="false" /> <property name="mediaTypes"> <value> json=application/json </value> </property> </bean>
-
==============================
4.@ Aarya의 대답은 나에게 잘 어울리지 못했지만 주위를 둘러보기에 좋은 힌트를 주었다. 그래서 이것은 나를 위해 일하는 것입니다. 내 봄이 4.3.12.RELEASE이고 jackson이 2.9.2라는 것을 감안할 때
@ Aarya의 대답은 나에게 잘 어울리지 못했지만 주위를 둘러보기에 좋은 힌트를 주었다. 그래서 이것은 나를 위해 일하는 것입니다. 내 봄이 4.3.12.RELEASE이고 jackson이 2.9.2라는 것을 감안할 때
<mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper"> <bean class="com.fasterxml.jackson.databind.ObjectMapper" /> </property> </bean> </mvc:message-converters> </mvc:annotation-driven>
from https://stackoverflow.com/questions/41128623/jsonignorepropertiesignoreunknown-false-is-not-working-in-spring-4-2-0-and-up by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] "SQL 구문에 오류가 있습니다. MySQL 서버 버전에 해당하는 매뉴얼에서 올바른 구문 오류 "Hibernate 4 [duplicate] (0) | 2019.05.09 |
---|---|
[SPRING] 비동기 메서드를 실행하는 사용자 가져 오기 (0) | 2019.05.09 |
[SPRING] 어노테이션을 사용하는 Spring Bean 상속 Bean reference back issue (0) | 2019.05.09 |
[SPRING] Apache CXF + Spring : 간단한 클라이언트 생성 (0) | 2019.05.09 |
[SPRING] 봄에 같은 콩을 여러 개 가져 오는 법? (0) | 2019.05.09 |