[SPRING] 봄 부팅에서 ProblemHandler를 ObjectMapper로 설정할 수 없음
SPRING봄 부팅에서 ProblemHandler를 ObjectMapper로 설정할 수 없음
Jackson2ObjectMapperBuilderCustomizer를 사용하여 객체 매퍼에 사용자 정의 문제 처리기를 추가하려고했습니다.
@Bean
public Jackson2ObjectMapperBuilderCustomizer customizer() {
return new Jackson2ObjectMapperBuilderCustomizer() {
@Override
public void customize(Jackson2ObjectMapperBuilder builder) {
ObjectMapper m = builder.build();
m.addHandler(
new DeserializationProblemHandler() {
@Override
public boolean handleUnknownProperty(DeserializationContext ctxt, JsonParser p, JsonDeserializer<?> deserializer, Object beanOrClass, String propertyName) throws IOException {
System.out.println("ahahahaa");
return super.handleUnknownProperty(ctxt, p, deserializer, beanOrClass, propertyName);
}
}
);
}
};
}
하지만 내가 autowired ObjectMapper 빈 _problemHandlers 속성이 null입니다.
나는 또한 존재하는 ObjectMapper를 다음과 같이 사용자 화하려고 시도했다.
@Autowired
public customize(ObjectMapper mapper) {
...
}
그러나 결과는 같습니다. 누가이 자산을 지울 수 있는지 모르겠습니다. 나는 다른 장소에서 객체 매퍼의 다른 빌더 / 공장 / 등을 전혀 초기화하지 않는다. 내가 뭘 잘못하고있어?
해결법
-
==============================
1.Jackson2ObjectMapperBuilder 또는 Jackson2ObjectMapperBuilderCustomizer를 통해 DeserializationProblemHandler를 ObjectMapper에 직접 추가하는 것은 불가능합니다. 생성 된 ObjectMapper는 메소드에 대해 로컬이므로, 빌더에서 build ()를 호출하는 것은 중단됩니다. Spring 자체는 나중에 build ()를 호출하여 다른 ObjectMapper 인스턴스를 작성합니다.
Jackson2ObjectMapperBuilder 또는 Jackson2ObjectMapperBuilderCustomizer를 통해 DeserializationProblemHandler를 ObjectMapper에 직접 추가하는 것은 불가능합니다. 생성 된 ObjectMapper는 메소드에 대해 로컬이므로, 빌더에서 build ()를 호출하는 것은 중단됩니다. Spring 자체는 나중에 build ()를 호출하여 다른 ObjectMapper 인스턴스를 작성합니다.
그러나 Jackson 모듈을 등록하면 이렇게 할 수 있습니다.
이렇게하면 작동합니다.
@Bean public Jackson2ObjectMapperBuilderCustomizer customizer() { return new Jackson2ObjectMapperBuilderCustomizer() { @Override public void customize(Jackson2ObjectMapperBuilder builder) { builder.modules(new MyModule()); } }; } private static class MyModule extends SimpleModule { @Override public void setupModule(SetupContext context) { // Required, as documented in the Javadoc of SimpleModule super.setupModule(context); context.addDeserializationProblemHandler(new MyDeserializationProblemHandler()); } } private static class MyDeserializationProblemHandler extends DeserializationProblemHandler { @Override public boolean handleUnknownProperty(DeserializationContext ctxt, JsonParser p, JsonDeserializer<?> deserializer, Object beanOrClass, String propertyName) throws IOException { System.out.println("ahahahaa"); return super.handleUnknownProperty(ctxt, p, deserializer, beanOrClass, propertyName); } }
from https://stackoverflow.com/questions/46644099/cant-set-problemhandler-to-objectmapper-in-spring-boot by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Eclipse가`ehcache '와 동작하도록 설정하는 법 (0) | 2019.02.25 |
---|---|
[SPRING] @Async가 나를 위해 작동하지 않습니다. (0) | 2019.02.25 |
[SPRING] Spring 데이터 MongoDB 저장소 - JPA 스펙 (0) | 2019.02.25 |
[SPRING] 추상 클래스에 정의 된 스프링 autowire 의존성 (0) | 2019.02.25 |
[SPRING] Spring 3.0.5 - java.awt.HeadlessException - com.trend.iwss.jscan (0) | 2019.02.25 |