webmvc(webmvcconfigureradapter)

http://www.itjxue.com  2023-01-25 01:56  来源:未知  点击次数: 

WebMvcConfigurer详解

WebMvcConfigurer接口常用的方法:

addInterceptor:需要一个实现HandlerInterceptor接口的拦截器实例

addPathPatterns:用于设置拦截器的过滤路径规则;addPathPatterns("/**")对所有请求都拦截

excludePathPatterns:用于设置不需要拦截的过滤规则

拦截器主要用途:进行用户登录状态的拦截,日志的拦截等。

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

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

addResoureHandler:指的是对外暴露的访问路径

addResourceLocations:指的是内部文件放置的目录

这个方法是用来配置视图解析器的,该方法的参数ViewResolverRegistry 是一个注册器,用来注册你想自定义的视图解析器等。

configureMessageConverters:信息转换器

springmvc enablewebmvc注解作用

@enablewebmvc注解有什么用途:

@EnableWebMvc是使用Java 注解快捷配置baiSpring Webmvc的一个注解。在使用该注解后配置一个继承于WebMvcConfigurerAdapter的配置类即可配置好Spring Webmvc。

通过查看@EnableWebMvc的源码,可以发现该注解就是为了引入一个DelegatingWebMvcConfiguration Java 配置类。并翻看DelegatingWebMvcConfiguration的源码会发现该类似继承于WebMvcConfigurationSupport的类。

其实不使用@EnableWebMvc注解也是可以实现配置Webmvc,只需要将配置类继承于WebMvcConfigurationSupport类即可。

内容:

Spring 3 风格的类型转换 -- 通过一个ConversionService 实例 配合JavaBean PropertyEditors,用于Data Binding。

支持@NumberFormat注解通过ConversionService 来格式化Number字段。

支持使用@DateTimeFormat注解来格式化Date、Calendar、Long、以及Joda Time字段。

支持使用@Valid校验@Controller input -- 如果classpath中存在一个JSR-303 Provider。

HttpMessageConverter支持@RequestMapping或@ExceptionHandler method的 @RequestBody method parameters和@ResponseBody method 返回值。

比较长,其实就是支持handler (controller)的@RequestBody参数/@ResponseBody返回值。

springboot启动,不带webmvc

springboot启动,不带webmvc是因为

springboot启动的时候有可能系统出现故障,所以才会没有带webmvc,也有可能是网络问题,导致没有带webmvc。希望可以帮助到您。

webmvcconfigurationsupport导致springvalidate失效

失效的原因

继承WebMvcConfigurationSupport类是会导致自动配置失效的原因:

 在spring boot的自定义配置类继承 WebMvcConfigurationSupport 后,发现自动配置的静态资源路径(classpath:/META/resources/,classpath:/resources/,classpath:/static/,classpath:/public/)不生效。

首先看一下 自动配置类的定义:

这是因为在 springboot的web自动配置类 WebMvcAutoConfiguration 上有条件注解

@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)

这个注解的意思是在项目类路径中 缺少 WebMvcConfigurationSupport类型的bean时改自动配置类才会生效,所以继承 WebMvcConfigurationSupport 后需要自己再重写相应的方法。

如果想要使用自动配置生效,又要按自己的需要重写某些方法,比如增加 viewController ,则可以自己的配置类可以继承 WebMvcConfigurerAdapter 这个类。不过在spring5.0版本后这个类被丢弃了 WebMvcConfigurerAdapter ,虽然还可以用,但是看起来不好 = =。

这是类上的注释,意思是spring 5.0后要使用Java8,而在Java8中接口是可以有default方法的,所以这个类就没必要了。所以我们只需要在自定义配置类中直接实现

————————————————

版权声明:本文为CSDN博主「fmwind」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:

spring-webmvc和spring-web有什么区别

1、定义不同

spring-web是一个一站式的框架,提供了表现层(springmvc)到业务层(spring)再到数据层的全套解决方案;spring的两大核心IOC(控制反转)和AOP(面向切面编程)更是给我们的程序解耦和代码的简介提供了支持。

而Spring-webMVC是基于Spring功能之上添加的Web框架,想用pring-webMVC必须先依赖pring-web,pring-webMVC仅给spring的表现层提供支持。

2、项目范围

pring-web可以说是一个管理bean的容器,也可以说是包括很多开源项目的总称。

而pring-webMVC只是其中一个开源项目。

扩展资料:

spring框架的优点有以下几点:

1、JAVA EE应该更加容易使用。

2、面向对象的设计比任何实现技术(比如JAVA EE)都重要。

3、面向接口编程,而不是针对类编程。Spring将使用接口的复杂度降低到零。(面向接口编程有哪些复杂度?)

4、代码应该易于测试。Spring框架会帮助你,使代码的测试更加简单。

5、提供了应用程序配置的最好方法。

参考资料来源:百度百科-spring MVC

参考资料来源:百度百科-spring框架

WebMvcConfigurer 与 WebMvcConfigurationSupport 关系及避坑指南

该类提供了主要的 MVC 配置方法,通过直接继承 WebMvcConfiguration ,并在继承类上 加上 @EnableWebMvc 和 @Configuration 注解之后。便可以在子类中实现父类的方法 ,更甚至可以实现含有@Bean 注解的方法,但记得一定要在实现的方法上加上 @Bean

WebMvcConfigurationSupport 中提供了一些内容为空的方法,这些方法主要是用来给子类自定义时实现,根据方法名称的分类,有以下几种类型

该类是通过 "回调" 的方式来进行自定义化 Spring MVC 相关配置,大多数情况下,我们通过实现它的 抽象类 WebMvcConfigurerAdapter 来配置,因为它有WebMvcConfigurer 接口所有方法的一个空的实现,WebMvcConfigurer 接口中的所有方法都是 WebMvcConfigurationSupport 中提供给子类实现的空方法。

为什么是说它是通过回调来实现的自定义配置? 用DelegatingWebMvcConfiguration 和 WebMvcConfigurerComposite 类来解释。

DelegatingWebMvcConfiguration 类 简称【代理类】通过继承 WebMvcConfigurationSupport,所以拥有了 customize 自定义mvc 配置的权利。该类通过持有的对象 WebMvcConfigurerComposite 简称【聚合类】则是一个聚合了所有实现了 WebMvcConfigurer 接口的子类,如此一来,【代理类】所有实现 WebMvcConfigurationSupport 的方法调用时,则是将【聚合类】中的所有WebMvcConfiguer 接口的实现类的该方法依次进行调用

WebMvcConfigurationSupport 在整个应用程序中只会生效一个,如果用户已经实现了 WebMvcConfigurationSupport,则 DelegatingWebMvcConfiguration 将不会生效,换句话来说,WebMvcConfigurer 的所有实现类将不会生效。而在Spring 中,如果类路径上不存在 WebMvcConfigurationSupport 的实例,则将会默认实现

WebMvcConfigurerAdapter、DelegatingWebMvcConfiguration 来自定义mvc 配置。

而当 WebMvcAutoConfiguration 不生效时会导致以下几个问题:

1.WebMvcProperties 和 ResourceProperties 失效

因为两个配置类中的属性都在 WebMvcAutoConfiguration 中使用

2.类路径上的 HttpMessageConverter 失效

如:StringHttpMessageConverterConfiguration、MappingJackson2HttpMessageConverter ,因为 HttpMessageConverters 中持有着所有HttpMessageConverter的实例, 在 WebMvcAutoConfigurationAdapter 中会注入 HttpMessageConverters ,因此当 WebMvcAutoConfigurationAdapter 不加载时,则会失效,间接的造成 spring.http.encoding.charset 与 spring.jackson.date-format 假象的失效。

如:

StringHttpMessageConverter 会使用 spring.http.encoding.charset 配置, 默认编码为:ISO-8859-1

常用解决方案:

因为已知的配置类都已通过 @Bean 注册在容器中,那么我们可以在使用 WebMvcConfigurationSupport 时,通过 @Autowired 注入到配置类中,然后替换调 WebMvcConfigurationSupport 默认的配置即可,如:

也可以根据需求来重新实现。总之明白为什么会失效之后,解决起来思路也更清晰

(责任编辑:IT教学网)

更多

相关Freehand教程文章

推荐Freehand教程文章