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/"); }
}