SpringMVC @GetMapping注解路径冲突问题解决
作者:赵四司机 发布时间:2022-12-18 01:43:17
标签:SpringMVC,@GetMapping,路径冲突
在SpringMVC的入门学习中,我发现@GetMapping注解的使用要注意路径冲突问题,在网上都没找到类似我这样的情况,所以我在这里将问题分享出来,希望遇到我这样的问题的可以有个参考,但是为什么这样就不行我还没搞懂,希望知道的人可以在评论区或者私信告诉我。问题如下:我的controller层有两个查询操作,一个是按id查询,一个是按name模糊查询,一开始我的程序是
@GetMapping("/{id}")
public Result getById(@PathVariable Integer id) {
if(id == 0){
throw new BusinessException(Code.BUSINESS_ERR,"请规范您的操作!");
}
Book book = bookService.getById(id);
Integer code = (book == null? Code.GET_ERR:Code.GET_OK);
String msg = (book == null? "数据查询失败!":"");
return new Result(code,book,msg);
}
@GetMapping(value = ("/{name}"))
public Result getByName(@PathVariable String name){
//解决中文乱码
byte[] bytes = name.getBytes(StandardCharsets.ISO_8859_1);
String Name = new String(bytes,StandardCharsets.UTF_8);
List<Book> bookList = bookService.getByName(Name);
Integer code = (bookList == null ? Code.GET_ERR:Code.GET_OK);
String msg = (bookList == null? "系统繁忙,请稍后再试!":"");
return new Result(code,bookList,msg);
}
此时编译不报错,用Apifox进行测试
可以看到无论是想用id查询还是用name查询都无法查询成功,说明程序无法识别哪个是按id查询哪个是按name查询这时候就想到如果在每个@GetMapping中指定具体路径呢?下面来尝试一下
@GetMapping("/getById/{id}")
@GetMapping(value = ("/getByName/{name}"))
运行结果:
可以看到通过id查询可以查询成功,但是通过name查询时候无论是在路径中添加参数还是自定义参数都无法查询成功,这里我也搞不明白,希望知道原理的大佬可以告诉我,十分感谢!
最终我找到的解决方案是指定参数名称(不知道这样说对不对,可以看代码):
@GetMapping(value = ("/getById"))
public Result getById(@RequestParam("id") Integer id) {
System.out.println("id="+id);
if(id == 0){
throw new BusinessException(Code.BUSINESS_ERR,"请规范您的操作!");
}
//将可能出现的异常进行包装,转换成自定义异常
try{
int i = 1/0;
}catch (Exception e){
throw new SystemException(Code.SYSTEM_TIMEOUT_ERR,"服务器访问超时,请稍后再试!",e);
}
Book book = bookService.getById(id);
Integer code = (book == null? Code.GET_ERR:Code.GET_OK);
String msg = (book == null? "数据查询失败!":"");
return new Result(code,book,msg);
}
@GetMapping(value = ("/getByName"))
public Result getByName(@RequestParam("name") String name){
//解决中文乱码 要注意用SpringBoot时不需要进行中文乱码处理
byte[] bytes = name.getBytes(StandardCharsets.ISO_8859_1);
String Name = new String(bytes,StandardCharsets.UTF_8);
List<Book> bookList = bookService.getByName(Name);
Integer code = (bookList == null ? Code.GET_ERR:Code.GET_OK);
String msg = (bookList == null? "系统繁忙,请稍后再试!":"");
return new Result(code,bookList,msg);
}
此时查询:
要注意参数位置,此时可以看到两者都查询成功,至此问题解决,要是有大佬知道用
@GetMapping("/getById/{id}")
@GetMapping(value = ("/getByName/{name}"))
这种方法怎么做还请告诉我一下。
来源:https://blog.csdn.net/weixin_45750572/article/details/124857232
0
投稿
猜你喜欢
- 输入方法第一种输入方法:scannerimport java.util.Scanner; // 导入java.util.Scannerpub
- 本文实例为大家分享了JavaFX实现简单日历效果的具体代码,供大家参考,具体内容如下1.先看效果:2.代码:1)ClockEdge.java
- 一、概述本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空。Optional 是 Java 实现函
- 泛型的概述和优势泛型概述泛型:是JDK5中引入的特性,可以在编译阶段约束操作的数据类型,并进行检查。泛型的格式:<数据类型>;
- 二叉搜索树的定义它是一颗二叉树任一节点的左子树上的所有节点的值一定小于该节点的值任一节点的右子树上的所有节点的值一定大于该节点的值特点: 二
- 本文简要介绍如何使用Spring Cloud Gateway 作为API 网关(不是使用zuul作为网关),关于Spring Cloud G
- 接口回调是指:可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。实际上,当接口变
- 本文实例讲述了Spring使用ClassPathResource加载xml资源。分享给大家供大家参考,具体如下:一 代码package le
- 前言Java多线程实现方式主要有四种:① 继承Thread类、实现Runnable接口② 实现Callable接口通过FutureTask包
- 确保这个修改是正确的(否则将会出现乱码)创建i18n文件夹(就是国际化的意思),然后在此文件加下创login.properties logi
- 登陆是系统最基础的功能之一。这么长时间了,一直在写业务,这个基础功能反而没怎么好好研究,都忘差不多了。今天没事儿就来撸一下。以目前在接触和学
- 目录“头疼”“吃药”工具代码使用代码“头疼”自己在用Angular做项目时,前端要请求后端数据时的代码如下this.http.get(&qu
- RocketMQ发送消息我们在使用RocketMQ发送消息时,一般都会使用DefaultMQProducer,类型的代码如下:Default
- 1. 开方:Math.sqrt(x);2. x的a方:Math.pow(x,a);3. 绝对值:Math.abs(x);4. BigInte
- spring cloud gateway获取请求的真实地址在使用spring cloud gateway的时候,路由一般配置为服务名例如 l
- 前言现在是移动端产品疯狂的年代,随之,移动端支付也是热门小技能,最近本公司在做一个移动端,要接入微信支付和支付宝支付, * 惯,功能做完之后做
- 前言Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案,Nacos 作为其核心组件之一,可以作为注册中心和配置中
- 目录1. 应用场景1.1. 保障线程安全1.2. 显示传递参数2. 实现原理3. 注意事项ThreadLocal是线程私有的局部变量存储容器
- 一、Lambda 表达式的基础语 * ambda 表达式的基础语法:Java8中引入了一个新的操作符 "->" 该操
- 前言开发中很多需要javac 的程序依赖 JAVA_HOME环境变量.如果是手工下载源码安装的JDK,很容易知道JAVA_HOME的目录.