Spring请求路径带参数URL使用注解的写法说明

 更新时间:2021年08月16日 15:00:11   作者:灵颖桥人  
这篇文章主要介绍了Spring请求路径带参数URL使用注解的写法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Spring请求路径带参数URL使用注解的写法

调用外部平台http接口,Post请求,url 为路径带有参数的形式:

http://xxxxxx.com/openApi/auth/getUserAuth?version=v1.0

使用 Retrofit 框架(本文使用的2.6.2版本)发送Post请求,可以在 @Post 注解中直接带上参数,如下:

    @POST("auth/getUserAuth?version=v1.0")
    Call<McgjResponse<UserAuthResponseDTO>> getUserAuth(@Body UserAuthRequest userAuthRequest);

因为初次使用 Retrofit 框架,所以自己启动Spring服务模拟外部平台接口,发现之前一直都在@PostMapping中定义路径,还没怎么写过带参数的,导致写错了,报 404错误,记录一下下。先说正确写法:

正确写法:

@PostMapping(value ="/authorize/addRecord",params = "version=v1.0")
    public McgjResponse<UserAuthResponseDTO> test(){

其实@RequestMapping、@GetMapping、@PostMapping 三个注解都可以指定请求Header、请求path、以及请求params。

@RequestMapping("/foo") 等价于 @RequestMapping(path="/foo")

 /**
  * The primary mapping expressed by this annotation.
  * <p>In a Servlet environment this is an alias for {@link #path}.
  * For example {@code @RequestMapping("/foo")} is equivalent to
  * {@code @RequestMapping(path="/foo")}.
  * <p>In a Portlet environment this is the mapped portlet modes
  * (i.e. "EDIT", "VIEW", "HELP" or any custom modes).
  * <p><b>Supported at the type level as well as at the method level!</b>
  * When used at the type level, all method-level mappings inherit
  * this primary mapping, narrowing it for a specific handler method.
  */
 @AliasFor("path")
 String[] value() default {};

所以平常在括号中直接写,只是指定了 path。如果错误地把参数写到请求 path 中,则会报 HTTP 404 错误,如下错误写法:

错误写法:

//错误写法
@PostMapping(value ="/auth/getUserAuth?version=v1.0")
    public McgjResponse<UserAuthResponseDTO> test(){

小结:

这三个注解平时用的是如此之多,却如此不熟悉,实在不应该!

Spring注解@RequestMapping请求路径映射问题

@RequestMapping请求路径映射,如果标注在某个controller的类级别上,则表明访问此类路径下的方法都要加上其配置的路径;最常用是标注在方法上,表明哪个具体的方法来接受处理某次请求。

以下两种方式都可以从url中传参数,但是第二种方式的适用性更高一些,当参数中包含中文的时候,如果用第一种方式传参数,经常会出现参数还没到controller就已经经过编码了(例如:经过utf-8编码后,原本要传的参数就会以%+ab...cd这样的方式出现),然后controller接受到这样的请求后,根本无法解析该请求应该走那个业务方法。

然后就会出现常见的404问题。。。

package com.test.jeofey.web; 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; 
 
@Controller
@RequestMapping("/path")
public class TestController {
 
 // 第一种传参数的方式 访问地址例如:http:域名/path/method1/keyWord.html
 @RequestMapping("method1/{keyWord}")
 public String getZhiShiDetailData(@PathVariable("keyWord") String keyWord,
   HttpServletRequest request, HttpServletResponse response){
  System.out.println(keyWord);
  return "v1/detail";
 }
 
 // 第二种传参数的方式 访问地址例如:http:域名/path/method2.html?key=keyWord
 @RequestMapping("method2")
 public String getCommonData(HttpServletRequest request, 
   HttpServletResponse response){
  String keyWord= request.getParameter("key");
  System.out.println(keyWord);
  return "v1/common";
 }  
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 带着新人看java虚拟机01(推荐)

    带着新人看java虚拟机01(推荐)

    这篇文章主要介绍了java虚拟机,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 用java实现扫雷游戏

    用java实现扫雷游戏

    这篇文章主要为大家详细介绍了用java实现扫雷游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • Spring boot框架JWT实现用户账户密码登录验证流程

    Spring boot框架JWT实现用户账户密码登录验证流程

    这篇文章主要介绍了Springboot框架JWT实现用户账户密码登录验证,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • Java经典用法总结(二)

    Java经典用法总结(二)

    这篇文章主要介绍了Java经典用法总结,在本文中,尽量收集一些java最常用的习惯用法,特别是很难猜到的用法,本文重点讲解了java应用和输入输出常用方法,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • Java多线程下载网图的完整案例

    Java多线程下载网图的完整案例

    这篇文章主要给大家介绍了关于Java多线程下载网图的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 例举fastJson和jackson转json的区别

    例举fastJson和jackson转json的区别

    今天小编就为大家分享一篇关于例举fastJson和jackson转json的区别,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • MyBatis-Plus updateById不更新null值的方法解决

    MyBatis-Plus updateById不更新null值的方法解决

    用Mybatis-Plus的updateById()来更新数据时,无法将字段设置为null值,更新后数据还是原来的值,本文就来详细的介绍一下解决方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • 浅谈Java高并发解决方案以及高负载优化方法

    浅谈Java高并发解决方案以及高负载优化方法

    这篇文章主要介绍了浅谈Java高并发解决方案以及高负载优化方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 三行Java代码实现计算多边形的几何中心点

    三行Java代码实现计算多边形的几何中心点

    因为工作需要计算采煤机工作面的中心点,如果套用数学的计算公式,用java去实现,太麻烦了。本文将利用java几何计算的工具包,几行代码就能求出多变形的中心,简直yyds!还不快跟随小编一起学起来
    2022-10-10
  • Java设置Access-Control-Allow-Origin允许多域名访问的实现方法

    Java设置Access-Control-Allow-Origin允许多域名访问的实现方法

    这篇文章主要介绍了Java设置Access-Control-Allow-Origin允许多域名访问的实现方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-10-10

最新评论