SpringBoot WebMvcConfigurer详解

如题所述

第1个回答  2022-07-17

WebMvcConfigurer配置类其实是 Spring 内部的一种配置方式,采用 JavaBean 的形式来代替传统的 xml 配置文件形式进行针对框架个性化定制,可以自定义一些Handler,Interceptor,ViewResolver,MessageConverter。基于java-based方式的spring mvc配置,需要创建一个 配置 类并实现 WebMvcConfigurer 接口;

在Spring Boot 1.5版本都是靠重写 WebMvcConfigurerAdapter 的方法来添加自定义拦截器,消息转换器等。SpringBoot 2.0 后,该类被标记为@Deprecated(弃用)。官方推荐直接实现WebMvcConfigurer或者直接继承WebMvcConfigurationSupport,方式一实现WebMvcConfigurer接口(推荐),方式二继承WebMvcConfigurationSupport类,具体实现可看这篇文章。 https://blog.csdn.net/fmwind/article/details/82832758

常用的方法:

以前写SpringMVC的时候,如果需要访问一个页面,必须要写Controller类,然后再写一个方法跳转到页面,感觉好麻烦,其实重写WebMvcConfigurer中的addViewControllers方法即可达到效果了

值的指出的是,在这里重写addViewControllers方法,并不会覆盖 WebMvcAutoConfiguration (Springboot自动配置)中的addViewControllers(在此方法中,Spring Boot将“/”映射至index.html),这也就意味着自己的配置和Spring Boot的自动配置同时有效,这也是我们推荐添加自己的MVC配置的方式。

比如,我们想自定义静态资源映射目录的话,只需重写addResourceHandlers方法即可。

注:如果继承WebMvcConfigurationSupport类实现配置时必须要重写该方法,具体见其它文章

此时会注册一个默认的Handler:DefaultServletHttpRequestHandler,这个Handler也是用来处理静态文件的,它会尝试映射/。当DispatcherServelt映射/时(/ 和/ 是有区别的),并且没有找到合适的Handler来处理请求时,就会交给DefaultServletHttpRequestHandler 来处理。注意:这里的静态资源是放置在web根目录下,而非WEB-INF 下。
  可能这里的描述有点不好懂(我自己也这么觉得),所以简单举个例子,例如:在webroot目录下有一个图片:1.png 我们知道Servelt规范中web根目录(webroot)下的文件可以直接访问的,但是由于DispatcherServlet配置了映射路径是:/ ,它几乎把所有的请求都拦截了,从而导致1.png 访问不到,这时注册一个DefaultServletHttpRequestHandler 就可以解决这个问题。其实可以理解为DispatcherServlet破坏了Servlet的一个特性(根目录下的文件可以直接访问),DefaultServletHttpRequestHandler是帮助回归这个特性的。

这个方法是用来配置视图解析器的,该方法的参数ViewResolverRegistry 是一个注册器,用来注册你想自定义的视图解析器等。ViewResolverRegistry 常用的几个方法: https://blog.csdn.net/fmwind/article/details/81235401

跨域资源共享向来都是热门的需求,我们可以使用 CORS 来快速实现 跨域访问,只需要在服务端进行授权即可,无需在前端添加额外的设置

简单说,CORS是一种访问机制,英文全称: Cross-Origin Resource Sharing,即我们说的跨域资源共享。当一个资源从与该资源本身所在服务器不同的域或端口请求一个资源时,资源会发起一个跨域HTTP请求。比如,在一个域名下的网页中,调用另一个域名中的资源。

对于 CORS的跨域请求,上面的方式是重写webMvcConfigurer实现全局配置,这里展开一下,主要有以下几种方式可供选择:

在任意配置类,返回一个 新的 CorsFIlter Bean ,并添加映射路径和具体的CORS配置路径。

参考上面,此处省略

在控制器上使用注解 @CrossOrigin :

在Controller方法上使用注解 @CrossOrigin :

使用 HttpServletResponse 对象添加响应头(Access-Control-Allow-Origin)来授权原始域,这里 Origin的值也可以设置为 "*",表示全部放行。

Springboot2(5)WebMvcConfigurer讲解
Spring Boot 2 WebMvcConfigurer 实现详解请求与视图映射通过 `ViewController` 实现将请求转至特定视图。例如:通过 `@Override` 和 `addViewControllers` 方法配置视图控制器,让访问特定路径时自动返回指定的视图页面。例如访问 `127.0.0.1:8080\/login` 时,直接返回 `login.html` 页面。静态资源映...

SpringBoot--WebMvcConfigurer详解
配置类需实现WebMvcConfigurer接口,Spring Boot 1.5版本以前通过重写WebMvcConfigurerAdapter的方法来添加自定义拦截器、消息转换器等。Spring Boot 2.0以后推荐直接实现WebMvcConfigurer或继承WebMvcConfigurationSupport。常用方法包括:addInterceptors: 添加拦截器addViewControllers: 自定义页面跳转,简化Spring...

SpringBoot WebMvcConfigurer详解
在Spring Boot 1.5版本都是靠重写 WebMvcConfigurerAdapter 的方法来添加自定义拦截器,消息转换器等。SpringBoot 2.0 后,该类被标记为@Deprecated(弃用)。官方推荐直接实现WebMvcConfigurer或者直接继承WebMvcConfigurationSupport,方式一实现WebMvcConfigurer接口(推荐),方式二继承WebMvcConfigurationSupp...

Spring boot 中 WebMvcConfigurationSupport 详解
非常重要的提示: Springboot 中只能有一个 WebMvcConfigurationSupport 配置类是真正起作用的,对于这个问题,其实可以通过 implements WebMvcConfigurer 来解决,多个不同的类实现这个接口后的配置都可以正常运行。具体可参考 [ Spring Boot中只能有一个WebMvcConfigurationSupport配置类 ...

spring boot 为什么要用webmvcconfigurationsupport,是干什么用的?_百...
0版本后这个类被丢弃了 WebMvcConfigurerAdapter ,虽然还可以用,但是看起来不好 = =。这是类上的注释,意思是spring 5.0后要使用Java8,而在Java8中接口是可以有default方法的,所以这个类就没必要了。所以我们只需要在自定义配置类中直接实现 WebMvcConfigurer 接口就好了。如下:

WebMvcConfigurationSupport和WebMvcConfigurer的区别
springboot2.0之后配置拦截器extends 的WebMvcConfigurerAdapter过时,取而代之的是WebMvcConfigurationSupport。WebMvcConfigurerAdapter只是对WebMvcCofigurer的空实现,而WebMvcConfigurationSupport的实现的方法更全面 继承WebMvcConfigurationSupport会发现Spring Boot的WebMvc自动配置失效(WebMvcAutoConfiguration自动...

跨域问题?别担心!Spring Boot的5种奇巧淫技解救你
全局跨域通过重写WebMvcConfigurer。 局部跨域通过控制器或方法上使用注解@CrossOrigin。 局部跨域设置响应头:利用HttpServletResponse添加响应头(Access-Control-Allow-Origin)授权原始域,值可设为“*”全放行。 实现自定义filter:编写过滤器,如MyCorsFilter.java,配置至web.xml以生效。 以上方法可解决...

Springboot解决跨域的四种解决方案
方案方案一实现WebMvcConfigurer#addCorsMappings的方法 importorg.springframework.context.annotation.Configuration;importorg.springframework.web.servlet.config.annotation.CorsRegistry;importorg.springframework.web.servlet.config.annotation.WebMvcConfigurer;@ConfigurationpublicclassCorsConfigimplementsWebMvc...

烧脑巨作,Spring Boot请求处理(常用参数注解使用)
方法 :参照第一章说的SpringBoot三个自配置规则,利@configuration+WebMvcConfigurer自定义规则即可,因此为了开启矩阵变量的使用必须实现WebMvcConfigurer接口,完成对configurePathMatch方法的手动实现。而WebMvcConfigurer接口中所有的方法都是default的默认方法,因此可以使用适配器模式单独对该方法进行重写。所...

springboot各层(springboot每层做什么)
在基于SpringMVC框架的项目中,当需要解决跨域问题时,需要一个SpringMVC的配置类(实现了`WebMvcConfigurer`接口的类),并重写其中的方法,以允许指定条件的跨域访问,例如: 16.关于客户端提交请求参数的格式 通常,客户端向服务器端发送请求时,请求参数可以有2种形式,第1种是直接通过``拼接各参数与值,例如: 具体使用...

相似回答
大家正在搜