@RequestParam
用来加载URL中?之后的参数
比如: 这个请求/user?name=didspace 就可以如下面这样,使用@RequestParam 来加载URL 中的name 参数
@GetMapping("/user")
@ResponseBody()
public User findUserByName(@RequestParam("name") String name) {return userRepo.findByName(name);
}
@PathVariable
这个是Restful 风格中API中常用的注解,用来加载URL路径中的参数
比如,这个请求/user/1 就可以如下面这样,使用@PathVariable 来加载URL 中的id 参数
@GetMapping("/user/{id}")
@ResponseBody
public User findUserById(@PathVariable("id")String id) {return userRepo.findById(id);}
@MatrixVariable
这个我们用的并不是很多,但一些国外的系统有提供这类API 参数,这种API 参数通过; 分割。
比如,这个请求/books/reviews;isbn=1234;topN=5; 就可以如下面这样,使用@MatrixVariable 来加载URL 中用; 分割的参数
@GetMapping("/books/reviews")
@ResponseBody()
public List<BookReview> getBookReviews(@MatrixVariable String isbn, @MartirxVariable Integer topN) {return bookReviewsLogic.getTopNReviewsByIsbn(isbn,topN);
}
@RequestBody
这也是最常用的一个注解,用来加载POST/PUT 请求的复杂请求体(也叫:payload),比如,客户端需要提交一个复杂数据的时候,就要将这些数据放到请求体中,然后服务端使用@RequestBody 来加载请求体中的数据。
@PostMapping("/add")
public boolean addAccounts(@RequestBody List<Account> accounts) throws SQLException {accounts.stream().forEach(a -> {a.setCreateOn(Timestamp.from(Instant.now()));a.setLastLogin(Timestamp.from(Instant.now()));});return notificationLogic.addAccounts(accounts);}
@RequestHeader
@requestHeader 注解用来加载请求头中的数据,一般在业务系统中不太使用,但在基础设施的建设中会比较常用,比如传递分布式系统的TraceID 等,用法也很简单,比如,假设我们将鉴权数据存储在请求头中,那么就可以像下面这样用@RequestHeader 来加载请求头中的Authrization 参数
@GetMapping("/user")
@RequestBody()
public List<User> getUserList(@RequestHeader("Authorization") String authToken) {return userRepo.findAll();
}
@CookieValue
当我们需要与客户端保持有状态的交互时,就需要用到Cookie ,此时,服务端读取Cookie 数据的时候,就可以像下面这样用@CookieValue 来读取Cookie 中的SessionId 数据
@GetMapping("/user")
@RequestBody()
public List<User> getUserList(@CookieValue(name = "SessionId") String sessionId) {return userRepo.findAll();
}