WebMvcConfigurer对于springMvc的定制化
一、WebMvcConfigurer的接口注释。
定义回调方法以自定义通过@EnableWebMvc启用的 Spring MVC 的基于 Java 的配置。
@EnableWebMvc -annotated 配置类可以实现这个接口以被回调并有机会自定义默认配置。
二、依次来说明方法
2.1 addArgumentResolvers 添加参数解析器
HandlerMethodArgumentResolver: 从NativeWebRequest读取到HanlerMethod需要的参数的方法。
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(argumentResolver());
}
2.2 addCorsMappings 处理跨域问题
https://www.cnblogs.com/yuansc/p/9076604.html
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedHeaders("*")//可以让用户拿到的请求头
.allowCredentials(true) //用户是否允许发送cookie
.allowedMethods("*")
.maxAge(3600);
}
2.3 addFormatters 扩展添加Converter或Formatter
https://www.jianshu.com/p/e2505bc1a73d
Converter除了springMVC会用,其他场合也会用。
Formatter是线程安全的PropertyEditor。
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addFormatter(new BookFormatter(bookRepository));
}
public class BookFormatter implements Formatter<Book>{
private BookRepository repository;
public BookFormatter(BookRepository repository){
this.repository = repository;
}
@Override
public Book parse(String bookIdentifier, Locale locale)throws ParseException{
Book book = repository.findBookByIsbn(bookIdentifier);
return book ;
}
@Override
public String print(Book book, Locale locale){
return book.getIsbn();
}
}
2.4 addInterceptors 添加拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
InterceptorRegistration registration = registry.addInterceptor(new SuperAdminInterceptor());
/*指定拦截器 要拦截的请求(支持*通配符)*/
registration.addPathPatterns("/super_admin/**");
//指定拦截器 不拦截的请求(支持*通配符)
registration.excludePathPatterns("/super/toLogin");
}
2.5 addResourceHandlers 处理静态资源文件映射
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
String os = System.getProperty("os.name");
//如果是Windows系统
if (os.toLowerCase().startsWith("win")) {
registry.addResourceHandler("/app_file/**")
// /app_file/**表示在磁盘filePathWindow目录下的所有资源会被解析为以下的路径
.addResourceLocations("file:" + filePathWindow);
} else { //linux 和mac
registry.addResourceHandler("/app_file/**")
.addResourceLocations("file:" + filePathLinux) ;
}
super.addResourceHandlers(registry);
}
2.6addReturnValueHandlers 添加返回值处理器
@Override
public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers) {
returnValueHandlers.add(new MyHandlerMethodReturnValueHandler());
}
public class MyHandlerMethodReturnValueHandler implements HandlerMethodReturnValueHandler {
@Override
public boolean supportsReturnType(MethodParameter methodParameter) {
return methodParameter.hasMethodAnnotation(ResponseBody.class);
}
@Override
public void handleReturnValue(Object o, MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer,NativeWebRequest nativeWebRequest) throws Exception {
modelAndViewContainer.setRequestHandled(true);//不需要设置view处理
nativeWebRequest.getNativeResponse(HttpServletResponse.class)
.getWriter()
.write(JSONUtils.toJSONString(o));
}
}
2.7addViewControllers 地址资源文件映射
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/test").setViewName("/test");
}

浙公网安备 33010602011771号