복붙노트

[SPRING] Spring 4.1에서 사용중인 Jackson ObjectMapper를 얻으려면 어떻게해야합니까?

SPRING

Spring 4.1에서 사용중인 Jackson ObjectMapper를 얻으려면 어떻게해야합니까?

Spring 4.1은 Jackson ObjectMapper 인스턴스를 인스턴스화합니다. 나는 컨트롤러를 컨트롤러에 @Autowire하고 싶은 이유가있다. 컨트롤러는 Jackson을 사용하여 자체적으로 JSON 구문 분석을 수행하지만, 사용하는 ObjectMapper는 Spring 자체가 사용하는 인스턴스와 동일해야한다. 어떻게 그 일을 성취 할 수 있습니까?

Spring에서 사용중인 ObjectMapper를 사용자 정의 구성하는 방법을 묻지는 않습니다. 기본 설정에 만족합니다. 스프링에 의해 사용 된 인스턴스를 물고기로 만들어서 기존 인스턴스를 내 코드에서 재사용 할 수 있습니다.

해결법

  1. ==============================

    1.classpath에서 Jackson과 Spring Boot를 사용하고 REST 컨트롤러에서 JSON 구문 분석을위한 기본 구현을 사용한다면 다음과 같이 동작해야한다.

    classpath에서 Jackson과 Spring Boot를 사용하고 REST 컨트롤러에서 JSON 구문 분석을위한 기본 구현을 사용한다면 다음과 같이 동작해야한다.

    @Autowired
    private ObjectMapper jacksonObjectMapper;
    
  2. ==============================

    2.MappingJackson2HttpMessageConverter를 살펴보면 새로운 ObjectMapper가 생성되지만 Bean으로 노출되지는 않습니다. getter가 있지만 과거에 나왔던 유일한 방법은 직접 MappingJackson2HttpMessageConverter를 만들 때입니다.

    MappingJackson2HttpMessageConverter를 살펴보면 새로운 ObjectMapper가 생성되지만 Bean으로 노출되지는 않습니다. getter가 있지만 과거에 나왔던 유일한 방법은 직접 MappingJackson2HttpMessageConverter를 만들 때입니다.

    public class WebMvcConfiguration extends WebMvcConfigurerAdapter {
    
        @Override
        public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    
            MappingJackson2HttpMessageConverter jacksonMessageConverter = new MappingJackson2HttpMessageConverter();
            ObjectMapper objectMapper = jacksonMessageConverter.getObjectMapper();
    
            objectMapper.registerModule(new JodaModule());
            objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, true);
    
            converters.add(jacksonMessageConverter);
        }
    }
    

    Spring Boot로 작업한다면, 매뉴얼에 ObjectMapper 작업을위한 섹션이 있습니다. 기본 Jackson2ObjectMapperBuilder @Bean을 생성하면, 컨트롤러에서 같은 ObjectMapper 인스턴스를 자동으로 연결할 수 있어야합니다.

  3. ==============================

    3.다른 사람들에 의해 말했듯이, 당신은 컨트롤러에 직접 @Autowired 할 수 없습니다.

    다른 사람들에 의해 말했듯이, 당신은 컨트롤러에 직접 @Autowired 할 수 없습니다.

    @Emerson Farrugia의 제안을 사용하여 새 인스턴스 만들기

    Jackson2ObjectMapperBuilder.json().build()
    

    또한 얻어진 인스턴스가 spring.jackson. * 설정 속성을 따르지 않았기 때문에 나에게 도움이되지 않았다.

    내가 찾은 해결책은 Spring의 MappingJackson2HttpMessageConverter에서 ObjectMapper를 얻는 것이 었습니다.

    그래서 나는 그것을 autowired :

    @Autowired
    private MappingJackson2HttpMessageConverter springMvcJacksonConverter;
    

    다음과 같이 ObjectMapper를 가져옵니다.

    ObjectMapper objectMapper = springMvcJacksonConverter.getObjectMapper();
    

    이 인스턴스는 스프링 MVC 자신의 메시지 변환과 똑같이 동작한다. 어쨌든 아마 같은 인스턴스이다.

  4. ==============================

    4.평화!

    평화!

  5. ==============================

    5.ObjectMapper는 Jackson2ObjectMapperBuilder에 의해 작성되며 다음을 사용하여 빌더를 주입 할 수 있습니다.

    ObjectMapper는 Jackson2ObjectMapperBuilder에 의해 작성되며 다음을 사용하여 빌더를 주입 할 수 있습니다.

    @Autowired
    private Jackson2ObjectMapperBuilder mapperBuilder;
    

    그런 다음 mapperBuilder.build ()를 사용하여 ObjectMapper 인스턴스를 작성하면이 인스턴스는 application.properties의 구성을 사용할 수 있습니다. 여기 공식 문서.

  6. ==============================

    6.@Autowire를 MappingJackson2HttpMessageConverter에 보내려고하면 다음과 같이됩니다 : 'org.springframework.http.converter.json.MappingJackson2HttpMessageConverter'유형의 유효한 bean이 없습니다. 예상되는 단일 일치하는 bean이지만 발견되었습니다. 4 : mappingJackson2HttpMessageConverter, jacksonHttpMessageConverter, halJacksonHttpMessageConverter, alpsJsonHttpMessageConverter.

    @Autowire를 MappingJackson2HttpMessageConverter에 보내려고하면 다음과 같이됩니다 : 'org.springframework.http.converter.json.MappingJackson2HttpMessageConverter'유형의 유효한 bean이 없습니다. 예상되는 단일 일치하는 bean이지만 발견되었습니다. 4 : mappingJackson2HttpMessageConverter, jacksonHttpMessageConverter, halJacksonHttpMessageConverter, alpsJsonHttpMessageConverter.

    이것은 큰 문제는 아니며, 변수 이름을 위의 인스턴스 중 하나로 변경하면 해당 인스턴스를 얻을 수 있습니다. @Autowired     개인 MappingJackson2HttpMessageConverter halJacksonHttpMessageConverter;

  7. from https://stackoverflow.com/questions/30060006/how-do-i-obtain-the-jackson-objectmapper-in-use-by-spring-4-1 by cc-by-sa and MIT license