WebMvcConfigurer接口配置实现自定义web

SpringBoot中如果需要自己定义一些Handler,Interceptor,ViewResolver,MessageConverter需要实现WebMvcConfigurer接口来实现

@Configuration
public class WebConfig implements WebMvcConfigurer {

    /**
     * 对于GET方法,传入参数,时间类型进行转换
     * @param registry
     */
    @Override
    public void addFormatters(FormatterRegistry registry){
        registry.addConverter( new CustomConverter() );
    }

    /**
     * 对于RequestBody,传入,传出参数,进行时间类型进行转换
     * @param registry
     */
    @Bean
    public MappingJackson2HttpMessageConverter getMappingJackson2HttpMessageConverter() {
        MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
        //设置日期格式
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setDateFormat( CustomDateFormat.instance);

        objectMapper.setSerializationInclusion( JsonInclude.Include.NON_NULL);
        mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper);
        //设置中文编码格式
        List<MediaType> list = new ArrayList<MediaType>();
        list.add(MediaType.APPLICATION_JSON_UTF8);
        mappingJackson2HttpMessageConverter.setSupportedMediaTypes(list);
        return mappingJackson2HttpMessageConverter;
    }
/**
 * 配置消息转换器--这里可以用alibaba 开源的 fastjson
 * @param converters
 */
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters){
        converters.add(getMappingJackson2HttpMessageConverter());
//处理@RequestBody注解为String的情况,只支持接收单个参数的情况
        converters.add(new CustomerMappingJackson2HttpMessageConverter())
    }





    /****国际化内容*********************************/

/**LocaleChangeInterceptor spring动态改变本地语言,必须将区域解析器的Bean名称设置为localeResolver,这样DispatcherServlet才能自动侦测到它。请注意,每DispatcherServlet只能注册一个区域解析器。*/
    @Bean
    public LocaleResolver localeResolver() {
//检验用户浏览器中的Cookie,用CookieLocaleResolver来解析区域。如果Cookie不存在,它会根据accept-language HTTP头部确定默认区域
        CookieLocaleResolver localeResolver = new CookieLocaleResolver();
        localeResolver.setCookieName("localeCookie");
        //设置默认区域
        localeResolver.setDefaultLocale( Locale.CHINA);
        //设置cookie有效期.
        localeResolver.setCookieMaxAge(3600);
        return localeResolver;
    }

    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor() {
        LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
        // 参数名,根据参数值来改变用户的区域
        lci.setParamName("lang");
        return lci;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(localeChangeInterceptor());
    }
/**
 * 跨域支持
 * @param registry
 */
@Override
public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/**")
            .allowedOrigins("*")
            .allowCredentials(true)
            .allowedMethods("GET", "POST", "DELETE", "PUT")
            .maxAge(3600 * 24);
}

/**
 * 添加静态资源--过滤swagger-api (开源的在线API文档)
 * @param registry
 */
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    //过滤swagger
    registry.addResourceHandler("swagger-ui.html")
            .addResourceLocations("classpath:/META-INF/resources/");

    registry.addResourceHandler("/webjars/**")
            .addResourceLocations("classpath:/META-INF/resources/webjars/");

    registry.addResourceHandler("/swagger-resources/**")
            .addResourceLocations("classpath:/META-INF/resources/swagger-resources/");

    registry.addResourceHandler("/swagger/**")
            .addResourceLocations("classpath:/META-INF/resources/swagger*");

    registry.addResourceHandler("/v2/api-docs/**")
            .addResourceLocations("classpath:/META-INF/resources/v2/api-docs/");

}

}

猜你喜欢

转载自blog.csdn.net/qq_27173485/article/details/88716372