SpringMVC注解驱动的作用
https://blog.csdn.net/DDDDeng_/article/details/107151784
https://blog.csdn.net/u011066470/article/details/112438252
https://blog.csdn.net/qq_35029061/article/details/82945761
1. 概述作用
Tip 💡
在spring mvc的各个组件种,处理器映射器、处理器适配器、视图解析器成为spring mvc的三大组件
-
<mvc:annotation-driven> Spring MVC用来提供Controller请求转发,json自动转换等功能。,默认会帮我们注册默认处理请求,参数和返回值的类。
-
默认底层会集成jackson进行对象或集合的json格式字符串的转换,且使用它时候,自动加载ReuestMappingHandlerMapping(处理映射器)
和RequestMappingHandlerAdapter(处理适配器) -
在spirng-xml的配置文件中使用<mvc:annotation-driven> 替代注解处理器和适配器的配置
2. 使用场景
- <mvc:annotation-driven>会自动注册
RequestMappingHandlerMapping
与RequestMappingHandlerAdapter
两个Bean,这是Spring MVC为@Controller分发请求所必需的,并且提供了数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持读写XML的支持(JAXB)和读写JSON的支持(默认Jackson)等功能。 - 数据返回响应:
- 当我们需要controller返回一个 javabean,list,map等数据的json对象时,可以设定<mvc:annotation-driven />
- 静态资源的访问时
Tip 💡
一开始我在写配置的时候,只写了<context:component-scan/>,并没有使用<mvc:annotation-driven/>,servlet拦截*.do,.do请求可以被正确捕捉和处理。后来为了解决静态资源访问的问题,servlet改成了拦截所有请求,即/,并添加了默认的servlet,这时候*.do请求不能被控制器捕捉了,页面错误为404。直到添加了<mvc:annotation-driven/>之后,.do请求才又能被正确捕捉和处理。
3. 方式
a> 注解
@EnableWebMvc //开启MVC注解驱动
b> 配置文件
导入mvc 名称空间 xmlns:mvc="http://www.springframework.org/schema/mvc"
<!-- 开启mvc注解驱动 -->
<mvc:annotation-driven>
<mvc:message-converters>
<!-- 处理响应中文内容乱码 -->
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="defaultCharset" value="UTF-8" />
<property name="supportedMediaTypes">
<list>
<value>text/html</value>
<value>application/json</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>