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);    }

SpringMVC @GetMapping注解路径冲突问题怎么解决

此时编译不报错,用Apifox进行测试

SpringMVC @GetMapping注解路径冲突问题怎么解决

SpringMVC @GetMapping注解路径冲突问题怎么解决

可以看到无论是想用id查询还是用name查询都无法查询成功,说明程序无法识别哪个是按id查询哪个是按name查询这时候就想到如果在每个@GetMapping中指定具体路径呢?下面来尝试一下

@GetMapping("/getById/{id}")@GetMapping(value = ("/getByName/{name}"))

运行结果:

SpringMVC @GetMapping注解路径冲突问题怎么解决

SpringMVC @GetMapping注解路径冲突问题怎么解决

SpringMVC @GetMapping注解路径冲突问题怎么解决

可以看到通过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);    }

此时查询:

SpringMVC @GetMapping注解路径冲突问题怎么解决

SpringMVC @GetMapping注解路径冲突问题怎么解决

要注意参数位置,此时可以看到两者都查询成功,至此问题解决,要是有大佬知道用

@GetMapping("/getById/{id}")@GetMapping(value = ("/getByName/{name}"))

读到这里,这篇“SpringMVC @GetMapping注解路径冲突问题怎么解决”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。

文章标题:SpringMVC @GetMapping注解路径冲突问题怎么解决,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/26511

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云的头像亿速云认证作者
上一篇 2022年9月18日 下午10:28
下一篇 2022年9月18日 下午10:30

相关推荐

  • mysql不是内部命令如何解决

    解决方法:1、右击“计算机”图标,在打开的菜单中选择“属性”;2、在系统界面中,点击“高级系统设置”;3、在“系统属性”弹窗中,点击“环境变量”;4、在“环境变量”弹窗的“系统变量”区域中,选中“Path”,点击“编辑”;5、在打开的“编辑环境变量”窗口中,填入Mysql安装目录中的bin目录路径,…

    2022年9月24日
    93300
  • python中DataFrame数据合并merge()和concat()方法怎么用

    merge() 1.常规合并 ①方法1 指定一个参照列,以该列为准,合并其他列。 import pandas as pddf1 = pd.DataFrame({‘id’: [‘001’, ‘002’, ‘003’], ‘num1’: [120, 101, 104], ‘num2’: [110, 10…

    2022年9月21日
    1.7K00
  • windows nvidia驱动如何更新

    nvidia驱动更新方法: 1、首先我们下载一个nvidia GeForce experience软件。 2、下载安装完成后,点击右下角的nvidia图标,打开nvidia GeForce experience。 3、打开后,进入上方的“驱动程序”选项。 4、然后点击“检查更新文件”可以扫描到最新的…

    2022年8月29日
    53900
  • MySQL半同步复制如何配置

    前言: MySQL默认的主从复制采用的是异步模式,主库提交事务不需要确认是否已经传送到从库端,在主库发生宕机主备切换时,可能导致主库已经提交的事务在从库丢失的情况。 在MySQL 5.7通过插件支持了半同步复制模式,半同步模式下,主库事务至少要确保一个从库接收到日志才能完成提交,因此,可以保证在主库…

    2022年9月16日
    72700
  • mysql的安装路径如何查看

    查看方法:1、鼠标右击“计算机”图标,在打开的菜单中点击“管理”;2、依次点击“服务和应用程序”-“服务”;3、在右侧服务列表中,找到mysql服务;4、选中mysql服务,点击鼠标右键,在打开的菜单中选择“属性”;5、在“mysql属性”弹窗中,查看“可执行文件路径”选项的值即可,该选项的值就是M…

    2022年9月24日
    1.9K00
  • Vue3项目中如何引入SVG图标

    SVG 图标 既然是页面,肯定离不开一些图标 icon ,所以肯定要去较全的 阿里图标库 来寻找 这里讲解下如何将 阿里图标库 里面的东西,放到我们的页面上 阿里图标库 进入页面,找到 资源管理 下面的 我的项目,并创建项目 设置如下 创建好项目后,我们进入到 阿里的 素材库 里面找一些后续需要的图…

    2022年8月31日
    1.2K00
  • word页面变成左右两页怎么调回来

    调回来的方法: 1、首先打开word,然后点击顶部“视图”。 2、此时你可以看到单页选项,然后点击菜单中的“单页”。 3、此时就可以看到页面已经恢复正常了。 4、你也可以在变左右两页时,把右下角的显示比例调成100%来恢复正常。 以上就是“word页面变成左右两页怎么调回来”这篇文章的所有内容,感谢…

    2022年9月19日
    3.9K00
  • mysql增加的语句是什么

    增加语句有:1、CREATE DATABASE语句,用于增加数据库,语法“CREATE DATABASE 数据库名;”;2、CREATE TABLE语句,用于增加数据表,语法“CREATE TABLE 表名(列名 类型);”;3、ALTER TABLE语句,可向数据表添加字段,语法“ALTER TA…

    2022年9月21日
    56500
  • windows msedge.exe应用程序有什么功能

    “msedge.exe”指的是“Microsoft Edge”网页浏览器软件;“Microsoft Edge”是由Microsoft开发的网页浏览器,该浏览器在2015年被正式命名,并且内置在了Windows10版本中;该浏览器与IE浏览器相比,Edge将支持现代浏览器功能,比如扩展。 本教程操作环…

    2022年9月10日
    1.2K00
  • 如何研究sqlmap使用的注入技术

    使用django搭建了一个注入靶机 def te(request): id = request.GET.get(“id”) db = pymysql.connect(“127.0.0.1”, “root”, “123456”, “t1”, charset=’utf8′) cursor = db.cu…

    2022年9月13日
    73900
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部