SpringMVC에 MessageConverter 추가 방법

3169 단어
Post가 JSON 데이터를 제출하거나 서버에 JSON 데이터를 요청할 때 프로젝트에 JSON 데이터 분석용 MessageConserter를 추가하여 MessageConverter의 원본 코드를 다음과 같이 설정해야 합니다.
    //WebMvcConfigurationSupport.getMessageConverters	
    protected final List> getMessageConverters() {
		if (this.messageConverters == null) {
			this.messageConverters = new ArrayList<>();
			configureMessageConverters(this.messageConverters);
			if (this.messageConverters.isEmpty()) {
				addDefaultHttpMessageConverters(this.messageConverters);
			}
			extendMessageConverters(this.messageConverters);
		}
		return this.messageConverters;
	}

WebMvcConfigurationSupport.getMessageConverters()에서 messageConverters에 대해 세 번 설정하여 각각 세 가지 MessageConverter를 추가하는 방법에 대응합니다.
① configureMessageConverters: WebMvcConfigurer를 다시 로드합니다.configureMessageConverters
② extendMessageConverters: WebMvcConfigurer를 다시 로드합니다.extendMessageConverters
③ addDefaultHttpMessageConverters: 특정 종속성을 추가하면 자동으로 MessageConverter가 로드됩니다.
원본에서 알 수 있듯이 ①과 ③ 사이에는 그 중 하나만 사용할 수 있고 ①의 우선도는 ③보다 크다.
①을 사용하지 않았기 때문에 ②③에 대한 설명은 다음과 같습니다.
② 예:
종속성 추가:
        
            com.alibaba
            fastjson
            1.2.31
        

WebMvcConfigurer를 다시 로드합니다.extendMessageConverters:
    @Override
    public void extendMessageConverters(List> converters) {
        FastJsonHttpMessageConverter fjc = new FastJsonHttpMessageConverter();
        FastJsonConfig fj = new FastJsonConfig();
        fj.setSerializerFeatures(SerializerFeature.DisableCircularReferenceDetect);
        fjc.setFastJsonConfig(fj);
        converters.add(fjc);
    }

③ 소스 코드
public class WebMvcConfigurationSupport implements ApplicationContextAware, ServletContextAware {

	private static boolean romePresent =
			ClassUtils.isPresent("com.rometools.rome.feed.WireFeed",
					WebMvcConfigurationSupport.class.getClassLoader());

	private static final boolean jaxb2Present =
			ClassUtils.isPresent("javax.xml.bind.Binder",
					WebMvcConfigurationSupport.class.getClassLoader());

	private static final boolean jackson2Present =
			ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper",
					WebMvcConfigurationSupport.class.getClassLoader()) &&
			ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator",
					WebMvcConfigurationSupport.class.getClassLoader());

	private static final boolean jackson2XmlPresent =
			ClassUtils.isPresent("com.fasterxml.jackson.dataformat.xml.XmlMapper",
					WebMvcConfigurationSupport.class.getClassLoader());

원본 코드에서 알 수 있듯이 클래스com만 있으면 됩니다.fasterxml.jackson.databind.ObjectMapper,com.fasterxml.jackson.core.JsonGenerator가 있으면 됩니다.
        
            com.fasterxml.jackson.core
            jackson-databind
            2.9.9.3
        

좋은 웹페이지 즐겨찾기