美文网首页
GetMapping与PostMapping RequestPa

GetMapping与PostMapping RequestPa

作者: flyjar | 来源:发表于2020-08-20 07:40 被阅读0次

一.ge请求方式

  • get会将参入加入到url中发出请求,所以后台接收参数的时候,用@RequestParam,去接受url中的参数。前端直接传递json格式就可以
  • GET 请求没有明确规定,但如果在报文主体中传输数据,不同服务的处理方式也不一定相同,有的可能会被处理,有的可能会被忽略,所以通常 GET 请求没有报文主体,当请求为 GET 时,浏览器用默认的x-www-form-urlencoded的编码方式,表单提交时,把form数据转换成一个多个键值对的字符串(如appkey=3858be3c20ceb6298575736cf27858a7&foreignId=29118&deviceId=29118&bid=),然后把这个字符串追加到URL后面,用问号?分隔,加载这个新的URL。
  • 从上面的介绍中,我们知道 Content-Type表示报文中主体的内容类型,而 GET 请求没有报文主体,所以 GET 请求不需要指定 Content-Type,指定Content-Type是没有任何意义的。

二.post 请求的 Content-Type
2.1@RequestBody
使用@RequestBody的话,请求方式必须得是contentType:application/json**
post请求会将请求参数加入到body中,发出请求,请求类型为application/json。所以后台用RequestBody将body传递过来的json,解析成对应的bean。
这种用法的弊端
(1)前端请求必须把要传递的JSON参数,使用JSON.stringify(JSON_Params),转成字符串传递给后台
(2)后台只能接收这个对象,不能再接收这个对象以外的其他值

2.2@RequestParam
如果不加@RequestBody,那么ajax就不需要使用JSON.stringify(JSON_Params),直接传递JSON格式就可以。而且处理接收这个对象,还可以继续接收其他的JSON中的参数。
而且请求类型还必须得是contentType:application/x-www-form-urlencoded。是将请求参数加入到url中,k v对匹配,通过&号连接多个参数

@RequestParam可以接受简单类型的属性,也可以接受对象类型(如viewUserByBean方法)。创建一个实体类对象作为参数承载体,Spring MVC会根据参数名称自动将参数绑定到实体类对象的属性上,viewUserByBean就是这么处理的。

  • value:String 类型,请求参数名,如viewUserByEachEle 方法中的userName表示请求参数名,它的值将被绑定到方法参数name。
  • required:是否必须,默认值为true,表示请求参数中必须包含对应的参数,否则,将抛出400错误码;异常信息是org.springframework.web.bind.MissingServletRequestParameterException,提示“Required String parameter 'userName' is not present”。
  • defaultValue:String 类型,表示如果请求中没有同名参数时的默认值,默认值可以是SpEL表达式,如“#{systemProperties['java.vm.version']}”。

重点:其实如果不使用@RequestParam,Spring MVC也会将request的parameter自动绑定到method的parameter中,使用@RequestParam只不过是对parameter进行配置和对URL更精确化的配置。例如,在请求参数名和方法参数名相同时,则可以省略@RequestParam注解。

三.关于POST的请求中,body传递参数的三种 Content-Type 方式
3.1 multipart/form-data
以键值对的形式传递参数,支持上传文件。根据后台接收的bean,自动转化成指定的bean
后台可以用@RequestParam进行接收参数

3.2 application/x-www-form-urlencoded
以键值对的形式传递参数,不能上传文件。根据后台接收的bean,自动转化成指定的bean
后台可以用@RequestParam进行接收参数

3.3 applition/json(在postman中,是body下的raw,选择JSON)
以json或者xml以及其他格式的数据,转换成字符串的形式,传递参数,不能上传文件。
后台可以用@RequestBody进行接收参数,并自动转化成指定的bean。

四 post请求下,不同 Content-Type,前端对参数处理不同的操作

/**
 * post请求数据处理
 * @param {*} data 数据对象
 * @param {*} openDefultdata 是否开启默认数据?
 * @param {*} contentType 数据格式
 *  json: 'application/json; charset=utf-8' 
 *  form: 'application/x-www-form-urlencoded; charset=utf-8'
 */
http.adornData = (data = {}, openDefultdata = true, contentType = 'json') => {
  var defaults = {
    't': new Date().getTime()
  }
  data = openDefultdata ? merge(defaults, data) : data
  return contentType === 'json' ? JSON.stringify(data) : qs.stringify(data)
}

五后端对于各种请求的下的操作

post 请求

  • 1.1.contentType:application/json
    @PostMapping("login")
    @ApiOperation("登录")
    public R login(@RequestBody LoginForm form){}
  • 1.2.contentType:application/x-www-form-urlencoded
     @PostMapping("/save")
     public R list(@RequestParam String id,@RequestParam String name){}
  • 1.3.contentType:multipart/form-data
  @PostMapping("/upload")
   public R upload(@RequestParam("file") MultipartFile file){} 

get 请求

     @GetMapping("/list")
     public R list(@RequestParam String id){}

相关文章

网友评论

      本文标题:GetMapping与PostMapping RequestPa

      本文链接:https://www.haomeiwen.com/subject/xjxadktx.html