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

这种方法怎么做还请告诉我一下。

到此这篇关于SpringMVC @GetMapping注解路径冲突问题解决的文章就介绍到这了,更多相关SpringMVC @GetMapping路径冲突内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringMVC路径匹配中使用通配符问题

    目录 SpringMVC路径匹配中使用通配符 @RequestMapping中指定的路径也可以使用通配符* 通配符不是只能放在最后的 通配符还可以匹配以某字符结束的路径 通配符还可以匹配以某字符开始的路径 同时存在路径变量和通配符匹配时的优先级关系 请求路径参数使用正则表达式 SpringMVC路径匹配中使用通配符 @RequestMapping中指定的路径也可以使用通配符* 表示任意字符.如下的处理器方法可以映射请求/antstyle/a,可以映射请求/antstyle/b,但是它不能映射请求

  • 解决SpringMVC拦截器path路径的坑

    目录 SpringMVC拦截器path路径的坑 SpringMVC拦截器设置多个path 设置多个path SpringMVC拦截器path路径的坑 SpringMVC提供了很方便的拦截器供我们开发使用.在配置文件中通过<mvc:mapping path="" />进行配置拦截的路径,但是这个path在配置的时候有一个小坑 我们都知道在SpringMVC拦截器中的/**是配置全部路径.现在我有一个需求,想要拦截以/user/开头的请求.我的path写为/user/**,这样

  • SpringMVC请求的路径变量里面写正则表达式的方法

    /** * * 限制路径变量里面的值只能是数字 * http://localhost:8080/test/getUser/1 * http://localhost:8080/test/getUser/a */ @RequestMapping("/getUser/{id:\\d+}") public User getUser(@PathVariable(name = "id") String userId) { User user = new User(); user

  • SpringMVC找不到Controller路径的解决方案

    SpringMVC找不到Controller路径 自己用的是HBuilder,也不知道HBuilder能不能运行web项目. 猜测: 1.是Tomcat服务器的问题. 2.是少了Springmvc的配置. 应该是HBuilder的内置服务器匹配不上SpringMVC的实力. 又或者jdk1.8的问题,前者的可能性比较大. 解决方法: 1.重新用ssm的方式在eclipse中重写一个 2.找出问题所在 SpringMVC解决 系统找不到指定路径 问题展示: 问题原因: 这个原因是因为maven默认

  • 解决springmvc使用@PathVariable路径匹配问题

    一.问题 今天作毕设的时候,在搭建ssm框架的使用使用springmvc的@PathVariable时出现了一个路径匹配的问题,最后花了点时间解决了. 代码结构: 问题内容: 访问url为: 按照道理说,我应该到jsp的index页面去.最后的结果确实到了index页面,可是由于该页面引用了几个css和js,报异常找不到.有使用过spring经验的童鞋应该知道使用如下代码解决静态资源的访问. // 方法一 <mvc:default-servlet-handler/> // 方法二 <mv

  • springMVC的RequestMapping请求不到路径的解决

    目录 springMVC RequestMapping请求不到路径 controller层配置: web.xml配置: springmvc.xml的配置: 错误所在: Controller路径的问题RequestMapping("/...")导致获取不到页面传递给后台的数据 跳转页面的Controller 传递数据的Controller 已解决: springMVC RequestMapping请求不到路径 代码展示: controller层配置: @Controller public

  • 基于SpringMVC中的路径参数和URL参数实例

    1.SpringMVC中的路径参数就是指在路径中添加参数,用于实现伪静态是很好的. 2.路径参数实现方式(一个Controller方法) @RequestMapping(value="/page/{name}/{age}",method=RequestMethod.GET) public String getName(ModelMap map,@PathVariable("name") String name,@PathVariable("age"

  • SpringMVC xml文件路径在web.xml中的配置方式

    目录 SpringMVC xml文件路径在web.xml中的配置 SpringMVC 修改配置文件路径 1.1.Classpath 1.2.Classpath* 1.3.Classpath是什么 1.4.Classpath和classpath*的区别 SpringMVC xml文件路径在web.xml中的配置 正常情况下springmvc的xml文件应放在WEB-INF下,命名规则为[name]-servlet.xml, "-servlet"这个字段是必不可少的 [name]你可以随便

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

    在SpringMVC的入门学习中,我发现@GetMapping注解的使用要注意路径冲突问题,在网上都没找到类似我这样的情况,所以我在这里将问题分享出来,希望遇到我这样的问题的可以有个参考,但是为什么这样就不行我还没搞懂,希望知道的人可以在评论区或者私信告诉我.问题如下:我的controller层有两个查询操作,一个是按id查询,一个是按name模糊查询,一开始我的程序是 @GetMapping("/{id}") public Result getById(@PathVariable I

  • Spring和SpringMVC扫描注解类冲突的解决方案

    目录 Spring和SpringMVC扫描注解类冲突 最正确的配置方式 也可以用直接扫描的方式 几种不同配置的测试 Spring和SpringMVC注解扫描注意事项 现象 方法 Spring和SpringMVC扫描注解类冲突 最正确的配置方式 在主容器中applicationContext.xml中,将Controller的注解排除掉 <context:component-scan base-package="com"> <context:exclude-filter

  • SpringMVC @RequestMapping注解详解

    目录 一.@RequestMapping 1.@RequestMapping注解的功能 2.@RequestMapping注解的位置 二.@RequestMapping注解的属性 1.value属性(掌握) 2.method属性(掌握) 3.params属性(了解) 4.headers属性(了解) 5.SpringMVC支持ant风格的路径 6.SpringMVC支持路径中的占位符(重点) 三.@RequestMapping的派生类注解 测试form表单是否支持put或delete方式的请求 一

  • SpringMVC的注解@RequestMapping属性及使用

    目录 SpringMVC注解@RequestMapping 一.@RequestMapping 注解的位置 1. 作用在方法 2. 作用在类 二.@RequestMapping 注解的 value 属性 三.@RequestMapping 注解的 method 属性 @RequestMapping 结合请求方式的派生注解 四.@RequestMapping 注解的 params 属性 五.@RequestMapping 注解的 headers 属性 SpringMVC注解@RequestMapp

  • SpringMVC基于注解方式实现上传下载

    目录 一.文件下载 1-1.servlet原生方式下载 1-2.使用ResponseEntity实现下载 二.文件上传 2-1.添加commons-fileupload依赖 2-2.配置spring.xml注入CommonsMultipartResolver文件上传解析器 2-3.文件上传 一.文件下载 1-1.servlet原生方式下载 /**  * 基于servlet api的文件下载  */ @RequestMapping("/download") public String d

  • Springboot2.6.x高版本与Swagger2版本冲突问题解决方法

    目录 问题: 原因 完整解决方案: 问题: Spring Boot 2.6.x版本引入依赖 springfox-boot-starter (Swagger 3.0) 后,启动容器会报错: Failed to start bean ‘ documentationPluginsBootstrapper ‘ ; nested exception… 原因 Springfox 假设 Spring MVC 的路径匹配策略是 ant-path-matcher,而 Spring Boot 2.6.x版本的默认匹

  • SpringMVC使用注解配置方式

    目录 SpringMVC注解配置方式 一.创建初始化类 二.spring的配置类 三.WebConfig 配置类 剩余配置 SpringMVC注解配置方式 使用配置类和注解代替 web.xml 和 SpringMVC配置文件 的功能. 一.创建初始化类 在 Servlet3.0 环境中,容器会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类,如果找到的话就用它来配置 Servlet 容器. Spring 提供了这个接口的实现,名为Spr

  • lua中使用packagepath解决多个项目的路径冲突问题

    当多个lua项目在同一台服务器中有多个文件的文件名相同时,会优先使用路径中的排在前的项目的文件,导致引用的文件并不是你预期的那样. 例如:有项目A和项目B,都有一个文件test.lua,而test.lua这个文件在项目A和项目B内容都是不一样的,如果nginx的配置中,lua的packagepath是把项目A放在了前面.那么项目B在引用test.lua的时候,会使用了项目B的test.lua文件,这就导致了错误的出现. 那要如何解决这个问题呢? 我们可以在各自的项目中,重新定义packagepa

  • SpringMVC通过注解获得参数的实例

    SpringMVC可以通过RequestParam注解来映射获得参数,具体用法如下: 例子: 配置过程省略 1.新建controller类 package com.loger.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class RequestParam

随机推荐