All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.centit.framework.config.BaseSpringMvcConfig Maven / Gradle / Ivy

There is a newer version: 5.0.2101
Show newest version
package com.centit.framework.config;

import com.alibaba.fastjson.parser.Feature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import com.centit.framework.core.controller.WrapUpResponseBodyReturnValueHandler;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by zou_wy on 2017/3/29.
 */
@EnableWebMvc
@EnableAspectJAutoProxy(proxyTargetClass = true)
public class BaseSpringMvcConfig extends WebMvcConfigurerAdapter  implements ApplicationContextAware {

    private HttpMessageConverter jsonHttpMessageConverter = null;

    private synchronized HttpMessageConverter fastJsonHttpMessageConverter(){
        if(jsonHttpMessageConverter != null){
            return jsonHttpMessageConverter;
        }
        FastJsonHttpMessageConverter fastJsonHttpMessageConverter =
                new FastJsonHttpMessageConverter();
        List supportedMediaTypes = new ArrayList<>();
        supportedMediaTypes.add(MediaType.APPLICATION_JSON);
        supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);

        fastJsonHttpMessageConverter.setSupportedMediaTypes(supportedMediaTypes);

        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setFeatures(Feature.AllowArbitraryCommas,Feature.AllowUnQuotedFieldNames,
                Feature.DisableCircularReferenceDetect);
        fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");

        fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
        jsonHttpMessageConverter = fastJsonHttpMessageConverter;
        return jsonHttpMessageConverter;
    }

    @Override
    public void configureMessageConverters(List> converters) {
        converters.add(fastJsonHttpMessageConverter());
        converters.add(new StringHttpMessageConverter(Charset.forName("UTF-8")));
    }

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setViewClass(org.springframework.web.servlet.view.JstlView.class);
        resolver.setPrefix("/WEB-INF/jsp/");
        resolver.setSuffix(".jsp");
        registry.viewResolver(resolver);
    }

    /**
     * {@inheritDoc}
     * 

This implementation is empty. */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("classpath:messagesource/base/messages/**"); } /** * 重型排序 return Value Handlers * @param applicationContext 应用环境上下文 * @throws BeansException 异常 */ @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { RequestMappingHandlerAdapter requestMappingHandlerAdapter = applicationContext.getBean(RequestMappingHandlerAdapter.class); List sortedHandlers = new ArrayList<>(20); List defaultHandlers = requestMappingHandlerAdapter.getReturnValueHandlers(); // 建议都使用框架的这个注解处理,为了提高性能可以放在最前面: sortedHandlers.add(new WrapUpResponseBodyReturnValueHandler(fastJsonHttpMessageConverter())); sortedHandlers.addAll(defaultHandlers); // 下面的代码式 放到 Spring 定义的 Annotation-based 组中 排在 sortedHandlers 后面 /*for(HandlerMethodReturnValueHandler handler : defaultHandlers ){ sortedHandlers.add(handler); if(handler instanceof RequestResponseBodyMethodProcessor){ sortedHandlers.add(new WrapUpResponseBodyReturnValueHandler(fastJsonHttpMessageConverter())); } }*/ requestMappingHandlerAdapter.setReturnValueHandlers(sortedHandlers); } /*@Override public void configureHandlerExceptionResolvers(List exceptionResolvers) { exceptionResolvers.add(new GlobalHandlerExceptionResolver()); }*/ }