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


猜你喜欢
- 很多时候我们需要在Android设备上下载远程服务器上的图片进行显示,今天整理出两种比较好的方法来实现远程图片的下载。 方法一、直
- 单例模式动机有时候只有一个类的实例是很重要的。比如,一个系统应该只有一个窗口管理实例。单例模式是最简单设计模式:类负责实例化自己,确保只有一
- 合理的使用规则引擎可以极大的减少代码复杂度,提升代码可维护性。业界知名的开源规则引擎有Drools,功能丰富,但也比较庞大。在一些简单的场景
- 本文实例讲述了C#获取字符串后几位数的方法。分享给大家供大家参考。具体实现方法如下:#region 获取后几位数 public string
- 在上一篇实现了简单的画板功能, 这篇实现橡皮擦功能,首先分析一下应该如何实现,在Andriod有个图像混合(Xfermode)概念,利用这个
- Required String parameter xxx is not present类型异常异常报错学习Spring Boot的时候做一
- 篇首,完全没有技术含量的帖子,高手略过,只为十几年后重新捡起的我爱好玩玩。。。起因,一个朋友说他下载了很多短视频,但只需要要其中的一小截,去
- @RequestBody配合@Valid校验入参参数自定义一个Controllerimport com.example.demo.pojo.
- 如下所示:public static boolean isSdcardExists(Context context) {StorageMan
- 本文实例讲述了Android使用ViewFlipper和GestrueDetector共同实现滑屏效果。分享给大家供大家参考,具体如下:关于
- Spring的最基本的能力就是DI,即依赖注入,或控制反转,它可以为Bean注入其依赖的其他Bean。一个Bean依赖其他Bean一般是通过
- 以前用序列化都是一些方法需要才实现的,后来业务需求要深拷贝才去研究。参阅了别人博客得出一些总结。序列化是为了把Java对象转化为字节序列(字
- 一、前言 高斯混合模型(Gaussian Mixture Model)简称GMM,是一种业界广泛使用的聚类算法。它是多个高斯分布函
- 实现过滤器很简单,只需要继承ZuulFilter,并实现ZuulFilter中的抽象方法。filterType():定义过滤器的类型,它有4
- 效果图接下来就是一波贴代码的过程自定义Dialogpublic class SinaSendView extends Dialog { &n
- 一、首先将网页内容整个抓取下来,数据放在byte[]中(网络上传输时形式是byte),进一步转化为String,以便于对其操作,实例如下:p
- 场景:在学习JDBC的语言中,每次都执行通用的几步:即注册驱动,获取连接,创建操作,处理结果,释放资源 过于复杂,因此不妨将上述步骤封装成工
- 前言Windows 11下所有控件已经默认采用圆角,其效果更好、相对有着更好的优化,只是这是默认的行为,无法进一步自定义。圆角按钮实现【重写
- 1.使用的注意事项本节给大家带来基础UI控件部分的最后一个控件:DrawerLayout,官方给我们提供的一个侧滑菜单控件,和上一节的Vie
- Android广播机制概述Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播