복붙노트

[SPRING] 스프링 주석 기반 구성을 사용하는 동안 MappingJacksonHttpMessageConverter를 구성하는 방법은 무엇입니까?

SPRING

스프링 주석 기반 구성을 사용하는 동안 MappingJacksonHttpMessageConverter를 구성하는 방법은 무엇입니까?

필자는 순수 xml beans가 아닌 annotation을 통해 spring beans를 설정하기에 불합리한 결과를 보았습니다.

REST 채널을 사용하여 구성

<mvc:annotation-driven />

이제 null이 아닌 값을 가진 필드 만 JSON으로 출력하도록 MappingJacksonHttpMessageConverter를 구성하기 만하면됩니다. 나는 다음을 시도했다.

<bean id="jsonHttpMessageConverter"
    class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
    <property name="prefixJson" value="false" />
    <property name="supportedMediaTypes" value="application/json" />
    <property name="objectMapper">
        <bean class="org.codehaus.jackson.map.ObjectMapper">
            <property name="serializationInclusion" value="NON_NULL"/>
        </bean>
    </property>
</bean>

빈이 생성되지만 변환기의 다른 인스턴스가 만들어 져서 채널에 사용됩니다. 그래서 @ Stackingflow 질문에 설명 된 @Configuration 및 @Bean 길을 시도했지만 여전히 json serialization 자체 구성을 사용합니다.

마지막으로 매퍼를 통해 삽입하려고했습니다.

@Autowired
private MappingJacksonHttpMessageConverter jacksonConverter;

하지만 NoSuchBeanDefinitionException으로 끝났습니다. 이제는 옵션이 없으므로 여기에 아이디어가 필요합니다. 프레임 워크에서 사용하는 맵퍼를 제어하고 구성하는 방법은 무엇입니까?

해결법

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

    1.WebMvcConfigurer.configureMessageConverters () 메소드를 사용하십시오.

    WebMvcConfigurer.configureMessageConverters () 메소드를 사용하십시오.

    @Configuration을 사용하면 다음과 같은 이점을 얻을 수 있습니다.

    @Configuration
    class MvcConf extends WebMvcConfigurationSupport {
        protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
            converters.add(converter());
            addDefaultHttpMessageConverters(converters);
        }
    
        @Bean
        MappingJacksonHttpMessageConverter converter() {
            MappingJacksonHttpMessageConverter converter = new MappingJacksonHttpMessageConverter()
            //do your customizations here...
            return converter;
        }
    }
    

    사용자 지정 변환기를 사용할 때 기본값이 적용되지 않으므로 addDefaultHttpMessageConverters () 호출이 필요합니다.

    중요 참고 WebMvcConfigurationSupport를 확장하는 경우 변환기를 구성하려면 @EnableWebMvc를 제거해야합니다.

  2. ==============================

    2.자바 코드에서만 스프링 mvc 서블릿 설정을 커스터마이징하는 것은 여러 가지 방법으로 수행 할 수 있습니다.

    자바 코드에서만 스프링 mvc 서블릿 설정을 커스터마이징하는 것은 여러 가지 방법으로 수행 할 수 있습니다.

    가장 간단한 방법은 WebMvcConfigurerAdapter를 사용하여 @Configuration 주석이 달린 클래스를 확장하는 것 같습니다.

    @Configuration
    @EnableWebMvc
    public class ApplicationSpringConfig extends WebMvcConfigurerAdapter {
        @Override
        public void configureMessageConverters( List<HttpMessageConverter<?>> converters ) {
            converters.add(converter());
        }
    
        @Bean
        MappingJackson2HttpMessageConverter converter() {
            // [...]
        }
    }
    

    이것은 Tomasz Nurkiewicz의 답변에서 제공되는 예제와 매우 흡사합니다.

    그러나 WebMvcConfigurerAdapter 대신 WebMvcConfigurationSupport를 사용하면 고급 사용자 지정에 더 적합합니다. 기본 변환기를 추가해야하는 경우에도 마찬가지입니다.

    Spring 문서를 참조하십시오. 제공된 구성 사용자 정의하기

  3. from https://stackoverflow.com/questions/10650196/how-to-configure-mappingjacksonhttpmessageconverter-while-using-spring-annotatio by cc-by-sa and MIT license