在xml bean定义文件中使用<mvc:annotation-driven />配置Spring MVC时,在内部将一个名为RequestMappingHandlerMapping的组件注册到Spring MVC。 该组件或通常是HandlerMapping组件负责将请求URI路由到处理程序,这些处理程序是使用@RequestMapping注释进行注释的控制器方法。

RequestMappingHandlerMapping中有两个可能不直观的特定配置:

第一个配置是'useSuffixPatternMatch',如果说uri'/ members'映射到方法以返回实体列表,则'/members.xyz'将映射到相同的处理程序方法。
第二个配置是“ useTrailingSlashMatch”,即“ / members”和“ / members /”将映射到相同的处理程序方法。
如果需要修改这两种行为,则方法是配置RequestMappingHandlerMapping。

如果已使用<mvc:annotation-driven />定义RequestMappingHandlerMapping,那么执行此操作的笨拙方法将是删除<mvc:annotation-driven />,然后通过扩展可获取以下内容的组件来配置Spring MVC由处理“ mvc”名称空间的自定义名称空间处理程序注册,这是沿着这些方面的东西(这还不完整,只是为了说明配置的复杂性而显示):

<bean name='handlerAdapter' class='org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter'><property name='webBindingInitializer'><bean class='org.springframework.web.bind.support.ConfigurableWebBindingInitializer'><property name='conversionService' ref='conversionService'></property><property name='validator'><bean class='org.springframework.validation.beanvalidation.LocalValidatorFactoryBean'/></property></bean></property><property name='messageConverters'><list><bean class='org.springframework.http.converter.ByteArrayHttpMessageConverter'/><bean class='org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter'/><bean class='org.springframework.http.converter.json.MappingJackson2HttpMessageConverter'/><bean class='org.springframework.http.converter.StringHttpMessageConverter'></bean><bean class='org.springframework.http.converter.ResourceHttpMessageConverter'></bean><bean class='org.springframework.http.converter.xml.SourceHttpMessageConverter'></bean><bean class='org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter'></bean></list></property>
</bean><bean name='handlerMapping' class='org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping'><property name='useTrailingSlashMatch' value='false'></property>
</bean>

绝对不是更改配置的好方法。 相反,如果面对配置RequestMappingHandlerMapping的需要,一种更好的方法是通过以下方式将部分或整个Web-MVC配置移动到Java @Configuration:

package mvcsample.spring;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;@Configuration
public class WebConfig extends WebMvcConfigurationSupport{@Beanpublic RequestMappingHandlerMapping requestMappingHandlerMapping() {RequestMappingHandlerMapping handlerMapping = super.requestMappingHandlerMapping();handlerMapping.setUseSuffixPatternMatch(false);handlerMapping.setUseTrailingSlashMatch(false);return handlerMapping;}
}

并将此配置导入到配置xml的其余部分中(还有其他记录的方法):

<bean class='mvcsample.spring.WebConfig'/><!--
<mvc:annotation-driven>
</mvc:annotation-driven>
-->

因此,@Configuration提供了一种更简单的机制来配置Spring MVC中的组件,强烈建议从基于xml的配置迁移到Java配置,以简化配置和管理定制。

参考: Spring MVC –来自all和杂类博客的JCG合作伙伴 Biju Kunjummen 自定义RequestMappingHandlerMapping 。

翻译自: https://www.javacodegeeks.com/2013/01/spring-mvc-customizing-requestmappinghandlermapping.html

Spring MVC –自定义RequestMappingHandlerMapping相关推荐

  1. Spring MVC自定义验证注释

    在上一教程中,我展示了如何使用注释来验证表单 . 这对于简单的验证非常有用,但是最终,您需要验证一些现成的注释中没有的自定义规则. 例如,如果您需要根据输入的出生日期来验证用户已超过21岁,或者可能需 ...

  2. 使用Spring Boot和Spring MVC自定义HttpMessageConverters

    为Spring Boot应用程序或直接的Spring MVC应用程序公开基于REST的终结点很简单,以下是一个控制器,该终结点公开了一个终结点,用于基于其发布的内容创建实体: @RestControl ...

  3. Spring MVC自定义类型转换器Converter、参数解析器HandlerMethodArgumentResolver

    文章目录 一.前言 二.类型转换器Converter 1.自定义类型转换器 三.参数解析器 1.自定义分页参数解析器 2.自定义注解参数解析器 一.前言 Spring MVC源码分析相关文章已出: S ...

  4. Spring MVC 自定义验证器示例

    在任何 spring web mvc 应用程序中,我们经常必须处理表单.应用程序首先显示一个表单,然后用户填写该表单并将其提交给服务器.在服务器上,应用程序需要捕获表单输入并处理输入(例如,存储在数据 ...

  5. [转载] spring mvc自定义int枚举转换器

    参考链接: Java中具有自定义值的枚举 2019独角兽企业重金招聘Python工程师标准>>> public class MyIntegerEnumConverters { @Wr ...

  6. Spring MVC 实践 - Base

    Spring MVC 实践 标签 : Java与Web Spring Web MVC Spring-Web-MVC是一种基于请求驱动的轻量级Web-MVC设计模式框架, Spring MVC使用MVC ...

  7. Spring MVC详解(学习总结)

    一.Sprig MVC简介 1.1介绍 1.2MVC是什么 二.Spring MVC实现原理 2.1核心组件 2.2工作流程 三.第一个Spring MVC 四.常用注解 五.参数绑定 5.1URL风 ...

  8. spring mvc项目中利用freemarker生成自定义标签

    2019独角兽企业重金招聘Python工程师标准>>> spring mvc项目中利用freemarker生成自定义标签 博客分类: java spring mvc +freemar ...

  9. java自定义标签 map_基于Spring MVC的自定义标签Tag

    基于Spring MVC的自定义标签Tag 1.环境准备 本次小项目基于Spring MVC进行测试呈现,项目依赖的jar文件列表如下: 2.搭建SpringMVC Spring MVC环境最关键的两 ...

最新文章

  1. php 生成非对称密钥,php实现非对称加密
  2. 借助C/C++进行Android开发:NDK的配置与使用
  3. 算法设计与分析课程的时间空间复杂度
  4. x86汇编-1(第三章—第四章)虚拟硬盘基本信息,虚拟硬盘的写入,bochs调试
  5. JDK JRE 的作用与区别【转】
  6. 对 带头结点的单链表 的操作
  7. jwt重放攻击_JWT+ASP.NET MVC 时间戳防止重放攻击
  8. windows录屏_ApowerREC for Mac(屏幕录屏工具) V1.2.7.10激活版
  9. 2009年即将过去,准备迎接2010
  10. Gartner 发布2017 年商业智能和分析平台魔力象限 Tableau 获“领先者”
  11. tensorflow 中,修改张量tensor特定元素的值
  12. centos赋予访问权限
  13. ios不能保存png_花瓣网上面的图不能下载?教你怎样快速批量提取花瓣网图片
  14. 校园服务器虚拟机规划与设计,校园网服务器虚拟化技术的应用研究
  15. 如何终止运行matlab,matlab终止运行命令
  16. OpenGL纹理叠加
  17. (Linux)误删文件恢复命令及方法
  18. 解读混淆矩阵在语义分割FCN指标计算中的应用(含代码实现)
  19. 【笔记】h5活动页制作流程总结
  20. python适合什么发型-下面不属于python特性的是( )。

热门文章

  1. taro 缺点_Taro小程序富文本解析4种方法
  2. 以Linux系统(Ubuntu)开发生活(一)
  3. 项目不能使用fn标签_无服务器,Java和FN项目的第一步
  4. java parse_Java命令行界面(第9部分):parse-cmd
  5. java替换数组中的元素_如何使用Java 8流快速替换列表中的元素
  6. vue 脚手架测试环境_关于单元测试脚手架的几点思考
  7. jdk8读取文件_JDK 7和JDK 8中大行读取速度较慢的原因
  8. 使用Hibernate和Spring构建Java Web应用程序
  9. jersey spring_实施Jersey 2 Spring集成
  10. java 内存同步_Java中的硬件事务性内存,或者为什么同步将再次变得很棒