1. 首页
  2. 软件开发
  3. 浅谈@RequestParam、@RequestBody、@PathVariable

浅谈@RequestParam、@RequestBody、@PathVariable

  • 发布于 2024-08-19
  • 0 次阅读

首先先说明一下,三者都是作用于Controller层用来接收前端传递过来的数据。下面就来简单说一下三者之间的区别、使用方式以及常见的应用场景。

@RequestParam

  • @RequestParam注解一般与get请求一起使用。
  • 一个请求(一个方法中)可以有多个@RequestParam。
  • @RequestParam 用来接收普通参数。

那么问题来了,加@RequestParam和不加有什么区别呢?我们又该在什么时候用它呢?
(1)加@RequestParam注解

@RequestMapping("/user")
public String user(int userId) {
  return "user";
}

(2)不加@RequestParam注解

@RequestMapping("/user")
public String user(@RequestParam("userId") int userId) {
  return "user";
}
  • 不添加该注解则参数为非必传,反之参数为必传。参数名为userId。
  • 通过注解中的参数required = false可以设置参数为非必传。required值默认为true。
  • 通过@RequestParam("userId")或者@RequestParam(value = "userId")指定参数名。
  • 通过参数defaultValue = "0"可以指定参数默认值。**注意:**当为require设置为false时才可以使用defaultValue。
@RequestMapping("/user")
public String user(@RequestParam(value = "userId", defaultValue = "0", required = false) int userId) {
  return "user";
}

@RequestBody(常用)

  • @RequestBody注解一般与post方法使用。
  • 一个请求中只能存在一个@RequestBody注解。
  • @RequestBody 用于接收前端传递给后端的json字符串中的数据。(处理json格式的数据)

语法格式:

(@RequestBody Map map)
(@RequestBody Object object)

(1)(@RequestBody Map map)方式:

这种方式相对来说比较简单,我们将json解析成Map形式的key-value键值对,通过map.get("Key")就可以拿到值。

(2)(@RequestBody Object object)方式:

通过json字符串中的key来匹配对应实体类的属性,如果匹配一致且json中的该key对应的值符合实体类的对应属性的类型要求时,会调用实体类的setter方法将值注入到该属性。

代码样例:

public Result deleteBookById(@RequestBody HashMap<String, String> map) {
        bookService.deleteBookById(Long.parseLong(map.get("id")));
        return Result.createWithSuccessMessage();
    }

public Result updateBookById(@RequestBody Book book){
        Book record = bookService.updateBookById(book);
        return Result.createWithModel(record);
    }

@PathVariable(restful常用)

原文链接: https://blog.csdn.net/friggly/article/details/125884764