我的编程空间,编程开发者的网络收藏夹
学习永远不晚

解决SpringMVC @RequestMapping不设置value出现的问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

解决SpringMVC @RequestMapping不设置value出现的问题

SpringMVC @RequestMapping不设置value

从上个项目拷贝过来的form的action属性忘了修改了

在controller上没有设置@RequestMapping,方法上设置了但忘记设置value值,没想到还是能访问到,弄拙成巧,让我发现了这个问题

本以为会默认按照方法名来访问,当我修改方法名后依然能访问到

猜想会以表单字段和参数列表的对应关系来访问,修改后依然能访问到

因为我这个项目所有的controller的命名空间没有一个是“account”,所以猜想当SpringMVC无法匹配到对应的controller时会访问@RequestMapping没有配置value的方法, 于是新建一个Controller类,也是只在方法上配置了一个没有设置value的@RequestMapping,

这时启动tomcat报错:

Caused by: java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'testController' bean method
public java.lang.String com.ld.controller.TestController.login(java.lang.String,java.lang.String,java.lang.String,javax.servlet.http.HttpServletRequest)
to {[]}: There is already 'loginController' bean method
public java.lang.String com.ld.controller.LoginController.login(java.lang.String,java.lang.String,java.lang.String,javax.servlet.http.HttpServletRequest) mapped.
 at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.registerHandlerMethod(AbstractHandlerMethodMapping.java:212)
 at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.detectHandlerMethods(AbstractHandlerMethodMapping.java:184)
 at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.initHandlerMethods(AbstractHandlerMethodMapping.java:144)
 at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.afterPropertiesSet(AbstractHandlerMethodMapping.java:123)
 at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.afterPropertiesSet(RequestMappingHandlerMapping.java:126)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)
 ... 36 more

说明猜想正确,两个controller冲突了

后经测试,当@RequestMapping设置method属性,如一个方法上设置为GET,另一个设置为POST,http请求的方式不同,不会冲突,会找到对应的方法执行。

Spring mvc中@RequestMapping 6个基本用法小结

小结下spring mvc中的@RequestMapping的用法

1、最基本的,方法级别上应用

例如:


@RequestMapping(value="/departments")  
public String simplePattern(){ 
  System.out.println("simplePattern method was called");  
  return "someResult"; 
}  

则访问http://localhost/xxxx/departments的时候,会调用 simplePattern方法了

2、参数绑定


@RequestMapping(value="/departments")  
public String findDepatment(  
  @RequestParam("departmentId") String departmentId){ 
    System.out.println("Find department with ID: " + departmentId);  
    return "someResult";  
}  

形如这样的访问形式:

/departments?departmentId=23就可以触发访问findDepatment方法了

3、REST风格的参数


@RequestMapping(value="/departments/{departmentId}")  
public String findDepatment(@PathVariable String departmentId){  
  System.out.println("Find department with ID: " + departmentId);  
  return "someResult";    
}  

形如REST风格的地址访问,比如:

/departments/23,其中用(@PathVariable接收rest风格的参数

4、REST风格的参数绑定形式之2

先看例子,这个有点象之前的:


@RequestMapping(value="/departments/{departmentId}")  
public String findDepatmentAlternative(  
  @PathVariable("departmentId") String someDepartmentId){  
    System.out.println("Find department with ID: " + someDepartmentId);  
    return "someResult";  
}  

这个有点不同,就是接收形如/departments/23的URL访问,把23作为传入的departmetnId,,但是在实际的方法findDepatmentAlternative中,使用


@PathVariable("departmentId") String someDepartmentId

将其绑定为 someDepartmentId,所以这里someDepartmentId为23

5、url中同时绑定多个id


@RequestMapping(value="/departments/{departmentId}/employees/{employeeId}")  
public String findEmployee(  
  @PathVariable String departmentId,  
  @PathVariable String employeeId){  
    System.out.println("Find employee with ID: " + employeeId +   
      " from department: " + departmentId);  
    return "someResult";  
}  

这个其实也比较好理解了。

6、支持正则表达式


@RequestMapping(value="/{textualPart:[a-z-]+}.{numericPart:[\\d]+}")  
public String regularExpression(  
  @PathVariable String textualPart,  
  @PathVariable String numericPart){  
    System.out.println("Textual part: " + textualPart +   
      ", numeric part: " + numericPart);  
    return "someResult";  
}  

比如如下的URL:/sometext.123,则输出:

Textual part: sometext, numeric part: 123.

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

解决SpringMVC @RequestMapping不设置value出现的问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

解决出现Incorrect integer value: '' for column 'id' at row 1的问题

解决出现Incorrect integer value: '' for column 'id' at row 1的问题 前言: 今天在学习Python的过程中操作数据库,遇到了一个问题,执行sql语句插入数据的时候报错Incorrect i
2022-06-05

springBoot中使用@Value取值出现问题如何解决

这篇文章主要介绍“springBoot中使用@Value取值出现问题如何解决”,在日常操作中,相信很多人在springBoot中使用@Value取值出现问题如何解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答
2023-07-02

解决AndroidStudio出现“Cannotresolvesymbol”的问题

今天在调试的时候,AndroidStudio报了一个莫名其妙的错误Cannotresolvesymbol'R'让人不知所措,因为这东西根本不归我管啊,怎么会出现Cannotresolvesymbol这种错误呢?下面给大家分享AndroidStudio出现“Cannotresolvesymbol”解决方案,需要的朋友可以参考下
2023-03-13

如何解决springmvc不进入Controller导致404的问题

这篇文章主要为大家展示了“如何解决springmvc不进入Controller导致404的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决springmvc不进入Controller导
2023-06-29

MyBatis的核心配置出现问题怎么解决

如果MyBatis的核心配置出现问题,可以尝试以下解决方法:检查MyBatis配置文件(通常是mybatis-config.xml)是否正确配置了数据库连接信息、mapper路径等重要信息。检查mapper文件是否正确映射了数据库表和SQL
MyBatis的核心配置出现问题怎么解决
2024-03-01

解决 AWS Lambda 出现“内部服务器错误”的 Go 设置问题

编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天编程网就整理分享《解决 AWS Lambda 出现“内部服务器错误”的 Go 设置问题》,文
解决 AWS Lambda 出现“内部服务器错误”的 Go 设置问题
2024-04-04

如何解决docker容器设置中文语言包出现的问题

小编给大家分享一下如何解决docker容器设置中文语言包出现的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!如果在Docker 中采用 docker sear
2023-06-14

ubuntu出现权限不够问题怎么解决

如果在Ubuntu系统中遇到权限不足的问题,可以尝试以下解决方法:1. 使用sudo命令:在执行需要权限的命令前加上sudo,如sudo apt-get install package。这会使用管理员权限来执行命令。2. 添加用户到sudo
2023-09-16

windows7中出现不能录音问题的解决办法

第一步、右键声音控制处的喇叭图标,弹出如下菜单,选择“录音设备&randroiddquo;,看下图:第二步、在下方空白处右键,在弹出的菜单中勾选“显示禁用设备&rdquowww.cppcns.com;,看php下图:
2023-05-26

如何解决springmvc使用REST出现Request method 'PUT' not supported问题

小编给大家分享一下如何解决springmvc使用REST出现Request method PUT not supported问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录