当前位置: 代码网 > it编程>游戏开发>ar > @RequestParam和@RequestBody的区别是什么?一文看懂

@RequestParam和@RequestBody的区别是什么?一文看懂

2026年09月09日 ar 我要评论
1. @requestparam@requestparam:在 get 请求中,如果不需要使用它的特定属性,可以省略;而在其他请求(如 post、put 等)中,若通过 url 参数(param)方式

1. @requestparam

@requestparam:在 get 请求中,如果不需要使用它的特定属性,可以省略;而在其他请求(如 post、put 等)中,若通过 url 参数(param)方式传送数据,通常也会使用该注释。

不过,并非绝对必须使用,只是使用它能更方便地获取和处理参数。

要点:

  1. 使用@requestparam还是@requestbody主要取决于数据发送的方式和格式。如果数据是通过 url 参数(param,格式为key=value形式,多个参数用&连接)传递,就使用@requestparam;如果数据是通过请求体(如 json、xml 格式,使用data属性在请求中发送数据)传递,那就使用@requestbody。
  2. get 请求通常通过 url 参数发送数据,格式为?username=zhangsan&password=1234&email=zhangsan@powernode.com。post 请求也可以通过 url 参数发送数据(此时和 get 类似)
  3. 如果post请求的数据是通过post的请求体发送的,数据格式是username=zhangsan&password=1234这种格式(比如form表单),也需要使用@requestparam注解的参数接收。

属性

  • value:不解释看代码
  • defaultvalue:设置默认值
// 发送请求
request.get("/user"{
	params:{	// 必须使用params
		peopleage: 20,	
	}
})

@getmapping("/user")
// value属性 :指明发送时url中的名字,和这里的名字做对应,peopleage对应 age
public string getuser(@requestparam(value = "peopleage", defaultvalue = "18") int age) {
    return "your age is " + age;
}
  • required :是否必须传
@getmapping("/user")
public string getuser(@requestparam(required = false) string email) {
    if (email != null) {
        return "your email is " + email;
    } else {
        return "no email provided.";
    }
}

2. @requestbody

@requestbody: 用于 post、put 这类需要在请求体中携带数据的请求场景,特别是当前端发送 json 格式字符串数据时,后端可以用 java 类来接收这些数据。

用法:

  • @requestbody 主要用于处理有请求体的请求,比如 post、put 等请求体中的数据。get 请求没有请求体,不适用于 get 请求
  • 当前端发送的是 json 格式的字符串数据时,后端可以使用 @requestbody 注解配合一个 java 类来接收。

@requestbody不可以省略

  • required属性:是否必需传,默认值为true
@postmapping("/user/{id}")
public string updateuser(@requestbody user user) {
    // 根据id更新用户信息
    return "user updated successfully.";
}
  • 请求
import axios from 'axios';

// 假设后端接口地址
const baseurl = 'http://localhost:8080';

// 要发送的数据
const userdata = {
    // 假设user类有name和age属性,根据实际情况修改
    name: 'john doe',
    age: 30
};

// 发送post请求的函数
const sendpostrequest = async () => {
    try {
    //  虽然没有在请求头中指明发送的是json格式,只要使用post请求,就会自动对第二个参数进行json格式化
        const response = await axios.post(`/user`, userdata);
        console.log('请求成功', response.data);
    } catch (error) {
        console.error('请求失败', error);
    }
};

// 调用函数发送请求
sendpostrequest();

3. @pathvariable

  • @pathvariable:发送rest风格请求时使用

作用:

  1. rest风格请求的占位符
  2. 可用于任何请求中,get、post、put等等
  3. 也有required 属性

基本使用

/users/123 //请求的url

@getmapping("/users/{userid}")
public string getuserbyid(@pathvariable("userid") long id) {
    // 根据id从数据库或其他数据源获取用户信息
    return "user with id " + id + " retrieved successfully.";
}
/orders/100/items/200 // 亲求的url,多个

@getmapping("/orders/{orderid}/items/{itemid}")
public string getorderitem(@pathvariable("orderid") long orderid, @pathvariable("itemid") long itemid) {
    // 根据orderid和itemid获取订单中的商品信息
    return "retrieving item " + itemid + " from order " + orderid;
}

与正则表达式配合使用

@getmapping("/users/{userid:\\d+}")
public string getuserbyid(@pathvariable("userid") string userid) {
    // 这里可以确保userid是数字格式
    return "user with id " + userid + " retrieved successfully.";
}

4. 遇到的其他情况

特别注意属性名,请求中的属性名与controller中的属性名必须要一致

get请求发送数据,后端可以用类类型接收

  • get请求发送了4个参数
  request.get("/admin/list",{
    params:{
      currentpage:1,
      pagesize:10,
      username:"zhangsan",
      name:"张三",
    }
  })
  • controller接收
public class admincontroller {
  @getmapping("/list")
  public result<pageresult> getadminlist(
  	// 参数按照属性名接收
    @requestparam(defaultvalue = "1") integer currentpage,
    @requestparam(defaultvalue = "10") integer pagesize,
    // 请求中的参数名和实体类的属性名进行匹配
    admin admin
  ) {
    pageinfo<admin> adminlist = adminservice.getadminlist(currentpage, pagesize);
    return pageresult.ok(adminlist);
  }
}

post请求中@requestparam和@requestbody 一起使用

import axios from 'axios';
const baseurl = 'http://localhost:8080'; 
const sendpostrequest = async () => {
    try {
        const response = await axios.post(`/user`, {
            // 请求体参数
            userinfo: {
                name: 'john doe',
                age: 30
            }
        }, {
            // 查询参数
            params: {
                id: 123
            }
        });
        console.log('请求成功', response.data);
    } catch (error) {
        console.error('请求失败', error);
    }
};

sendpostrequest();
@postmapping("/user")
public string saveuser(
        @requestparam("id") long id,
        @requestbody userinfo userinfo) {
    // 保存用户逻辑
    return "user saved successfully.";
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com