@[email protected] @PathVariable @RequestParam三者区别

一、问题描述

由于项目是前后端分离,因此后台使用的是spring boot,做成微服务,只暴露接口。接口设计风格为restful的风格,在get请求下,后台接收参数的注解为RequestBody时会报错;在post请求下,后台接收参数的注解为RequestParam时也会报错。

二、问题原因

由于spring的RequestParam注解接收的参数是来自于requestHeader中,即请求头,也就是在url中,格式为xxx?username=123&password=456,而RequestBody注解接收的参数则是来自于requestBody中,即请求体中。

三、解决方法

因此综上所述,如果为get请求时,后台接收参数的注解应该为RequestParam,如果为post请求时,则后台接收参数的注解就是为RequestBody。附上两个例子,截图如下:

get请求

post请求

另外,还有一种应用场景,接口规范为resultful风格时,举个例子:如果要获取某个id下此条问题答案的查询次数的话,则后台就需要动态获取参数,其注解为@PathVariable,并且requestMapping中的value应为value="/{id}/queryNum",截图如下:

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

@ApiParam @PathVariable @RequestParam三者区别

[email protected] 顾名思义,是注解api的参数,也就是用于swagger提供开发者文档,文档中生成的注释内容。

  

@ApiOperation( value = "编辑公告", notes = "编辑公告", httpMethod = "POST" )
    @RequestMapping( value = "/edit", method = RequestMethod.POST )
    public RequestResult edit(
            @ApiParam(name = "title", value = "公告标题", required = true) @RequestParam("title") String title,
            @ApiParam(name = "content", value = "公告内容", required = true) @RequestParam("content") String content){

[email protected],是获取前端传递给后端的参数,可以是get方式,也可以是post方式。其中如果前端传递的参数和后端你接受的参数起的名字字段是一致的可以省略不写,也可以直接写@RequestParam String title,如果不一致一定要完整写,不然获取不到,如下面的bis_key就必须写。(必须是 ?key=value&key=value的URL中)

@ApiOperation( value = "编辑公告", notes = "编辑公告", httpMethod = "POST" )
    @RequestMapping( value = "/edit", method = RequestMethod.POST )
    public RequestResult edit(
            @ApiParam(name = "bis_key", value = "bis_key", required = true) String bisKey,
            @ApiParam(name = "title", value = "公告标题", required = true) @RequestParam String title,
            @ApiParam(name = "content", value = "公告内容", required = true)  String content,

[email protected],是获取get方式,url后面参数,进行参数绑定

@ApiOperation(value = "删除公告", notes = "删除公告", httpMethod = "POST")
    @RequestMapping(value = "/delete/{bisKey}", method = RequestMethod.POST)
    public RequestResult remove(@ApiParam(name = "bisKey", value = "需要删除的公告ids", required = true) @PathVariable String bisKey) {

原文地址:https://www.cnblogs.com/kelelipeng/p/10170306.html

时间: 2024-10-11 01:53:11

@[email protected] @PathVariable @RequestParam三者区别的相关文章

@[email protected]和@NotBlank的区别

这几个可以为对象,不只是字符串 [email protected] 不能为null,但可以为empty (""," "," ") [email protected] 不能为null,而且长度必须大于0 (" "," ") [email protected] 只能作用在String上,不能为null,而且调用trim()后,长度必须大于0 ("test") 即:必须有实际字符 原文地址:h

[email protected]与@Value的区别

配置文件yml还是properties他们都能获取到值:如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value:如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties: 1.功能 使用@Value来代替@ConfigurationProperties也是可以的 2.松散绑定 在application.properties中: 1 person.last-name=张三 如果不支持松散绑定,那么Per

@PathVariable和@RequestParam的区别,@SessionAttributes

简介: handler method参数绑定常用的注解,我们根据他们处理的Request的不同内容部分分为四类: A:处理requet uri部分(这里指uri template中variable,不含queryString部分)的注解:@PathVariable; B:处理request header部分的注解.@RequestHeader, @CookieValue; C:处理request body部分的注解.@RequestParam,  @RequestBody; D:处理attrib

$*和[email protected]之间区别代码分析

#!/bin/bash set 'apple pie' pears peaches for i in $*           /*单引号被去掉,循环单个字符输出*/ do echo $i done [[email protected] Ex_14.02-14.31]# sh 14-14-1 apple pie pears peaches -------------------------------------------------------------- #!/bin/bash set

$* 和[email protected]的区别

1 概述 $* 和[email protected]在有加双引号和没有双引号的情况下有明显的区别,在这边用一个实验进行测试 实验的环境如下 为了让实验结果更加明确,在参数里多了一个被双引号引用的参数,而且双引号内里也有多个数值,如下 运行语句 ./varnu.sh a b "12 66 a1c" 99 参数为  a b "12 66 a1c" 99 2 实验 2.1 $* 和 [email protected]没有双引号 $* 和 [email protected]

(转载)OC学习篇之[email protected]关键字的作用以及#include和#import的区别

前一篇文章说到了OC中类的三大特性,今天我们来看一下在学习OC的过程中遇到的一些问题,该如何去解决,首先来看一下我们之前遗留的一个问题: 一.#import和#include的区别 当我们在代码中使用两次#include的时候会报错:因为#include相当于拷贝头文件中的声明内容,所以会报重复定义的错误 但是使用两次#import的话,不会报错,所以他可以解决重复导入的问题,他会做一次判断,如果已经导入一次就不导入了 二.关键字@class的作用 在来看一下OC中的关键字@class的作用,在

OC学习篇之[email protected]关键字的作用以及#include和#import的区别

前一篇文章说到了OC中类的三大特性:http://blog.csdn.net/jiangwei0910410003/article/details/41707161今天我们来看一下在学习OC的过程中遇到的一些问题,该如何去解决,首先来看一下我们之前遗留的一个问题: 一.#import和#include的区别 当我们在代码中使用两次#include的时候会报错:因为#include相当于拷贝头文件中的声明内容,所以会报重复定义的错误 但是使用两次#import的话,不会报错,所以他可以解决重复导入

verilog中assign和[email protected](*)的区别和值得注意

verilog描述组合逻辑一般常用的有两种:assign赋值语句和[email protected](*)语句.两者之间的差别有: 1. 被assign赋值的信号定义为wire型,被[email protected](*)结构块下的信号定义为reg型,值得注意的是,这里的reg并不是一个真正的触发器,只有敏感列表为上升沿触发的写法才会综合为触发器,在仿真时才具有触发器的特性. 2. 另外一个区别则是更细微的差别:举个例子, wire a; reg b; assign a = 1'b0; [ema

springMVC @[email protected]@[email protected]@Controller的区别和理解

作用: @Component------------------------泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注.(Component-------成分; 组分; 零件) @Resource------------------------(资源) @Autowired-----------------------(自动绑定) @Repository-----------------------于标注数据访问组件,即DAO组件(repository-------仓库; 贮藏