| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- package org.ccframe.app;
- import java.io.File;
- import java.nio.charset.Charset;
- import java.util.List;
- import org.ccframe.commons.mvc.CcUserArgumentResolver;
- import org.ccframe.config.GlobalEx;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.context.annotation.Primary;
- import org.springframework.http.converter.HttpMessageConverter;
- import org.springframework.http.converter.StringHttpMessageConverter;
- import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
- import org.springframework.web.method.support.HandlerMethodArgumentResolver;
- import org.springframework.web.servlet.config.annotation.CorsRegistry;
- import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
- import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
- import com.fasterxml.jackson.annotation.JsonInclude.Include;
- import com.fasterxml.jackson.databind.DeserializationFeature;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import lombok.extern.log4j.Log4j;
- import lombok.extern.slf4j.Slf4j;
- @Configuration
- @Slf4j
- public class WebMvcConfigurer extends WebMvcConfigurationSupport {
-
- private static final String FILE_PERFIX = "file:";
-
- @Value("${app.debug.swagger}")
- private boolean swagger;
-
- /**
- * adminUser, apiUser的自动注入参数
- */
- @Override
- protected void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
- argumentResolvers.add(new CcUserArgumentResolver());
- super.addArgumentResolvers(argumentResolvers);
- }
- @Override
- public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
- converters.add(new StringHttpMessageConverter(Charset.forName("UTF-8")));
- // 这里必须加上加载默认转换器,不然bug玩死人,并且该bug目前在网络上似乎没有解决方案
- // 百度,谷歌,各大论坛等。你可以试试去掉。
- addDefaultHttpMessageConverters(converters);
- }
- @Override
- public void addResourceHandlers(ResourceHandlerRegistry registry) {
- //registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
- innerAddResourceHandlers(registry, GlobalEx.COMMON_STATICS_DIR);
- innerAddResourceHandlers(registry, GlobalEx.UPLOAD_DIR);
- innerAddResourceHandlers(registry, GlobalEx.SMALL_PICT_DIR);
- innerAddResourceHandlers(registry, GlobalEx.STATICS_DIR);
- innerAddResourceHandlers(registry, GlobalEx.TEMP_DIR);
- innerAddResourceHandlers(registry, GlobalEx.MANAGE_DIR);
- registry.addResourceHandler("/*.txt","/*.ico","/*.html").addResourceLocations(FILE_PERFIX + GlobalEx.APP_BASE_DIR + File.separator);
- registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/"); //knife4j的地址
- if(swagger) {
- log.info("Inited Api document at URI /doc.html");
- }
- registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
- }
- /**
- * 配置返回映射,null值字段不返回
- * @return
- */
- @Bean
- @Primary
- public MappingJackson2HttpMessageConverter customJackson2HttpMessageConverter(){
- MappingJackson2HttpMessageConverter convertor= new MappingJackson2HttpMessageConverter();
- ObjectMapper mapper = new ObjectMapper();
- mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
- mapper.setSerializationInclusion(Include.NON_NULL);
- convertor.setObjectMapper(mapper);
- return convertor;
- }
- private void innerAddResourceHandlers(ResourceHandlerRegistry registry, String dirName) {
- registry.addResourceHandler("/" + dirName + "/**").addResourceLocations(FILE_PERFIX + GlobalEx.APP_BASE_DIR + File.separator + dirName + File.separator);
- }
-
- @Value("${app.debug.cors:false}")
- private boolean cors;
- @Override
- protected void addCorsMappings(CorsRegistry registry) {
- if(cors) {
- registry.addMapping("/**")
- .allowedOrigins("*")
- .allowedMethods("GET", "HEAD", "POST","PUT", "DELETE", "OPTIONS")
- .allowedHeaders("*")
- .exposedHeaders("access-control-allow-headers",
- "access-control-allow-methods",
- "access-control-allow-origin",
- "access-control-max-age",
- "X-Frame-Options")
- .allowCredentials(false).maxAge(3600);
- }
- super.addCorsMappings(registry);
- }
- }
|