WebConfig配置

用于在 Servlet 3.0+ 容器中注册Servlet的ServletContextInitializer 。 类似于ServletContext提供的registration功能,但具有 Spring Bean 友好设计。
必须在调用onStartup之前指定servlet 。 URL 映射可以使用setUrlMappings配置或在映射到 ‘/*’ 时省略(除非alwaysMapUrl设置为false )。 如果未指定,将推断出 servlet 名称。
因为:
1.4.0
请参见:
ServletContextInitializer , ServletContext.addServlet(String, Servlet)
类型参数:
- 要注册的Servlet的类型

package com.abc.config;

import static com.alibaba.fastjson.serializer.SerializerFeature.DisableCircularReferenceDetect;
import static com.alibaba.fastjson.serializer.SerializerFeature.QuoteFieldNames;
import static com.alibaba.fastjson.serializer.SerializerFeature.WriteMapNullValue;
import static com.alibaba.fastjson.serializer.SerializerFeature.WriteNullListAsEmpty;
import static com.alibaba.fastjson.serializer.SerializerFeature.WriteNullNumberAsZero;
import static com.alibaba.fastjson.serializer.SerializerFeature.WriteNullStringAsEmpty;

import java.util.List;

import javax.servlet.MultipartConfigElement;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.DispatcherServlet;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;

@Configuration
public class WebConfig implements WebMvcConfigurer {

	@Override
	public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
		FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
		// 序列化配置
		FastJsonConfig config = new FastJsonConfig();
		config.setSerializerFeatures(QuoteFieldNames, // 输出key时是否使用双引号
				WriteMapNullValue, // 是否输出值为null的字段
				WriteNullNumberAsZero, // 数值字段如果为null,输出为0,而非null
				WriteNullListAsEmpty, // List字段如果为null,输出为[],而非null
				WriteNullStringAsEmpty, // 字符类型字段如果为null,输出为"",而非null
				// WriteNullBooleanAsFalse,//Boolean字段如果为null,输出为false,而非null
				// WriteNullStringAsEmpty,// null String不输出
				// WriteMapNullValue,//null String也要输出
				// WriteDateUseDateFormat,//Date的日期转换器
				DisableCircularReferenceDetect// 禁止循环引用
		);
		converter.setFastJsonConfig(config);
		converters.add(converter);
	}

	// 解决跨域
	@Bean
	public CorsFilter corsFilter() {
		CorsConfiguration conf = new CorsConfiguration();
		conf.addAllowedHeader("*");
		conf.addAllowedMethod("*");
		conf.addAllowedOrigin("*");
		conf.setAllowCredentials(true);
		conf.setMaxAge(3600L);
		conf.addExposedHeader("set-cookie");
		conf.addExposedHeader("access-control-allow-headers");
		conf.addExposedHeader("access-control-allow-methods");
		conf.addExposedHeader("access-control-allow-origin");
		conf.addExposedHeader("access-control-max-age");
		conf.addExposedHeader("X-Frame-Options");
		UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
		source.registerCorsConfiguration("/**", conf); // 4 对接口配置跨域设置
		return new CorsFilter(source);
	}

	@Autowired
	private MultipartConfigElement multipartConfigElement;
	@Autowired
	private DispatcherServlet dispatcherServlet;

	@Bean
	public ServletRegistrationBean<DispatcherServlet> apiServlet() {
		ServletRegistrationBean<DispatcherServlet> bean = new ServletRegistrationBean<DispatcherServlet>(
				dispatcherServlet);
		// 注入上传配置到自己注册的ServletRegistrationBean
		bean.addUrlMappings("/api/v1/*");
		bean.setMultipartConfig(multipartConfigElement);
		bean.setName("apiServlet");
		return bean;
	}

//    //区分api与静态资源。后端服务通过restful接口交互,静态资源通过/根目录的方式访问
//    @Bean
//    public ServletRegistrationBean<DispatcherServlet> apiV1ServletBean(WebApplicationContext wac) {
//    	DispatcherServlet servlet = new DispatcherServlet(wac);
//    	ServletRegistrationBean<DispatcherServlet> bean = new ServletRegistrationBean<DispatcherServlet>(servlet, "/api/v1/*");
//    	bean.setMultipartConfig(multipartConfigElement);
//    	bean.setName("api-v1");
//    	return bean;
//    }

//    @Bean
//    public ServletRegistrationBean<DispatcherServlet> restServlet(){
//      //注解扫描上下文
//      AnnotationConfigWebApplicationContext applicationContext
//          = new AnnotationConfigWebApplicationContext();
//      //base package
//      applicationContext.scan("com.abc.controller","com.abc.mbp.controller");
//      //通过构造函数指定dispatcherServlet的上下文
//      DispatcherServlet rest_dispatcherServlet
//          = new DispatcherServlet(applicationContext);
//     
//      //用ServletRegistrationBean包装servlet
//      ServletRegistrationBean<DispatcherServlet> registrationBean
//          = new ServletRegistrationBean<DispatcherServlet>(rest_dispatcherServlet);
//      registrationBean.setLoadOnStartup(1);
//      //指定urlmapping
//      registrationBean.addUrlMappings("/api/v1/*");
//      //指定name,如果不指定默认为dispatcherServlet
//      registrationBean.setName("api-v1");
//      return registrationBean;
//    }
//
	// shiro 静态资源不拦截
	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		registry.addResourceHandler("/**").addResourceLocations("classpath:/ui/");
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值