当前位置: 首页 > news >正文

@RequestParam、@RequestBody、@PathVariable

1. @RequestParam

  • @RequestParam:重要的是它的属性,如果它的属性用不到,这个注解可以不用
  • 要点:
    1. 可用于任何类型的请求(get请求数据在请求行中, post请求数据在请求体中)
    2. 无论时在请求行还是请求体,格式都是:username=zhangsan&password=1234&email=zhangsan@powernode.com

属性

  • 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请求时前端发送json格式字符串,后端用类接收
  • 用法
    1. 可用于非get请求的其他请求
    2. 前端发送的是json字符串,后端用类接收
    3. @RequestBody不可以省略
    4. required属性:是否必需传
@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 属性

1. 基本使用

/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;
}

2. 与正则表达式配合使用

@GetMapping("/users/{userId:\\d+}")
public String getUserById(@PathVariable("userId") String userId) {
    // 这里可以确保userId是数字格式
    return "User with id " + userId + " retrieved successfully.";
}

4. 遇到的其他情况

特别注意顺序,发送时参数的顺序和接收时参数的顺序

1. 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,
    // 第3个和第4个参数赋值给了admin类对象
    Admin admin
  ) {
    PageInfo<Admin> adminList = adminService.getAdminList(currentPage, pageSize);
    return PageResult.ok(adminList);
  }
}

2. 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.";
}

相关文章:

  • python 实现 A* 算法
  • AI日报 - 2025年3月16日
  • [测试]Selenium自动化测试常用函数
  • Java基础编程练习第31题-String类和StringBuffer类
  • 什么是 slot-scope?怎么理解。
  • 平安养老险深圳分公司积极开展2025年“3·15”金融消费者权益保护教育宣传活动
  • 19.如何使用 pandas 处理大型 Excel 文件:并行读取工作表
  • Spark 中创建 DataFrame 的2种方式对比
  • 【统计学相关笔记】抽样基本定理的证明
  • Linux与深入HTTP序列化和反序列化
  • 【LeetCode】622、设计循环队列
  • LuaJIT 学习(4)—— FFI 语义
  • JavaScript进阶篇:二、 对象与面向对象编程
  • 组合Ⅲ 力扣216
  • 卫语句优化多层if else嵌套
  • Typora最新版破解教程
  • 最新版VMware 17.6.3安装包分享
  • 功耗电流和耗电量的获取
  • 大数据 spark hive 总结
  • react(一):特点-基本使用-JSX语法
  • 解放日报:持续拿出排头兵姿态先行者担当
  • 下任美联储主席热门人选沃什:美联储犯下“系统性错误”,未能控制一代人以来最严重的通胀
  • 人民日报读者点题:规范涉企执法,怎样防止问题反弹、提振企业信心?
  • 酒店保洁员调包住客港币,海南官方通报:成立调查组赴属地调查
  • 读科学发展的壮丽史诗,也读普通人的传奇
  • 日均新开三家“首店”,上海的“首发经济”密码是什么?