RequestBody 和 RequestParam的区别

发布时间 2023-11-02 12:09:11作者: 小小的编程员

@RequestBody , 需要使用 传入 json格式,

专门为了application/jsonapplication/xml等设置的

  • 会自动装配到 实体类中

    • 代码

          @RequestMapping(value="test3",method = RequestMethod.POST)
          public void test3(@RequestBody UserDto userDto){
      //          from-data 报错 415
      //        x-www-form-uriencodéd 报错 415
      //        json 报错  400
              System.out.println(userDto);
          }
      
      **package com.example.hello_reqquestparam.common.dto;
      
      public class UserDto {
          private String name;
          private String password;
          private int age;
      
          public int getAge() {
              return age;
          }
      
          @Override
          public String toString() {
              return "UserDto{" +
                      "name='" + name + '\'' +
                      ", password='" + password + '\'' +
                      ", age=" + age +
                      '}';
          }
      
          public void setAge(int age) {
              this.age = age;
          }
      
          public String getPassword() {
              return password;
          }
      
          public void setPassword(String password) {
              this.password = password;
          }
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      }**
      
      

      image

  • 一般用于 post 请求

@RequestParam 与 "不写默认"

相同

  • 都是从 requestParam 作用域中 获取

  • 获取 除了 application/jsonapplication/xml等 方式 提交的内容

    form-data
    x-www-form-urlencoded
  • GET POST 都可以获取

  • 都可以用作文件传输,且 必须以 from-data 方式提交, 可用于文件上传

不同:

  • 会不会自动装载 实体类 ?

    不写默认 是可以 装载到 实体类中的,

    @ReqquestParam 无法装载到 实体类

  • @ReqquestParam 只支持 简单类型: String、 Ingeger 、Map (只能用于 某一个字段上)

    public void test22(@RequestParam HashMap<String,String> hashMap)

  • 作用不同

    不写时 ,默认 改参数时可以不传递的

    @RequestParam, 一般用于 规定 名字、必选、默认值等 属性

  • 原理:

    发起一次POST请求时,若未指定content-type,则默认content-type为application/x-www-form-urlencoded。

    即参数会以Form Data的形式进行传递,不会显式出现在请求url中。

    请求参数将被放置于request.paramter,解析成map。

    在控制台看到,数据就是在Form Data中。

    form表单中数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式为application/x-www-form-urlencoded)。

    所以urlQuery String ParametersForm Data里的参数都可以通过@RequestParam或者request.getParameter(" ")获取。

(33条消息) @requestbody和@requestparam到底什么作用_Archie_java的博客-CSDN博客_什么情况下需要@requestparam(33条消息)

@RequestBody的使用_justry_deng的博客-CSDN博客_@requestbody