@RequestBody、@RequestParam与@PathVariable异同

416 阅读2分钟
  • @RequestBody

    • 使用@RequestBody该注解,前端请求只能为POST,因为该注解是从请求体中获得对象的。且请求头中的Content-type一般为application/json方式。所以使用该注解能够接收JSON格式的数据,并且能把接收到的JSON数据绑定到JAVA对象中。复杂对象包括List,实体类,Map对象等。
  • @RequestParam()

    • 主要用来接收GET请求拼接在URL后的参数,或者是POST传递,且Content-type为x-www-form-urlencoded方式。因为不管是GET方式还是用x-www-form-urlencoded方式传递,参数都是以键值对方式拼接的,然后经过URLencoded编码,传递给服务端。
    • 指定的参数可以是普通元素,数组、集合、对象等等

RequestBody 接收的是请求体里面的数据;而RequestParam接收的是key-value里面的参数

  • 不加注解接收
    • 不加注解接收参数,参数类型可以为简单类型,也可以为复杂类型(JAVA对象等,前端传递的参数会和类中的属性名对应并且绑定)。也就是两种类型都可接收。而且GET请求和POST请求也都能接收到参数。但是POST请求时,和@RequestParam注解一样,Content-type只能为x-www-form-urlencoded。不加注解可以接收复杂对象,但是不能接收Map类型的对象。

不使用@requestBody.当请求content_type为:application/x-www-form-urlencoded类型的multipart/form-data时,数据格式为aaa=111&bbb=222。

  • @PathVariable
    • @PathVariable(["参数名"]) 映射 URL 绑定的占位符{参数名}

总结

  • 区别
    • @RequesParam用于接收url地址传参或表单传参
    • @RequesBody用于接收json数据
    • @RequestVariable用于接收路径参数,使用{参数名称}描述路径参数
  • 应用
    • 请求参数超过1个时,以json格式为主,使用@RequestBody
    • 键值形式,选用@RequestParam
    • 采用RESTful进行开发,参数较少采用@RequestVariable