2017-10-09 7 views
2

에 ObjectMapper에 ProblemHandler를 설정할 수 없습니다 :봄 부팅

@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); 
         } 
        } 
      ); 
     } 
    }; 
} 

을하지만 난 autowire가 때 ObjectMapper 콩 _problemHandlers 속성은 null입니다.

또한 단지와 ObjectMapper 존재 커스텀 시도 :

@Autowired 
public customize(ObjectMapper mapper) { 
... 
} 

그러나 결과는 동일합니다. 누가이 자산을 지울 수 있는지 모르겠습니다. 나는 다른 장소에서 객체 매퍼의 다른 빌더/공장/등을 전혀 초기화하지 않는다. 내가 뭘 잘못하고있어?

답변

2

DeserializationProblemHandlerJackson2ObjectMapperBuilder 또는 Jackson2ObjectMapperBuilderCustomizer을 통해 ObjectMapper에 직접 추가 할 수 없습니다. 빌더에 build()을 호출하는 것은 결과로 ObjectMapper이 메소드에 대해 로컬이므로 다음에 build()을 호출하여 다른 ObjectMapper 인스턴스를 생성합니다.

그러나 잭슨 모듈을 등록하여이를 수행 할 수있다 :

  • 빌더가 modules() 방법이 있습니다를
  • 모듈은 addDeserializationProblemHandler() 방법이있는 SetupContext 인스턴스에 setupModule()를 통해 액세스 할 수 있습니다