@RequestAttribute
类似于 @SessionAttribute,你可以使用 @RequestAttribute 注解来访问先前创建的(例如由 Servlet Filter 或 HandlerInterceptor 创建)请求范围内的属性。
使用示例
java
@GetMapping("/")
public String handle(@RequestAttribute Client client) {
// 访问当前请求中名为 "client" 的属性
return "index";
}kotlin
@GetMapping("/")
fun handle(@RequestAttribute client: Client): String {
// 访问当前请求中名为 "client" 的属性
return "index"
}补充教学
1. 它是怎么放进去的?
通常你在过滤器的 doFilter 方法里写:
java
request.setAttribute("client", clientObject);或者在拦截器的 preHandle 方法里做类似的操作。@RequestAttribute 让你在 Controller 里优雅地把它们“取”出来。
2. 与 @RequestParam 的区别
这是新手常犯的错误:
- @RequestParam:拿的是客户端传过来的数据(URL 参数或表单)。
- @RequestAttribute:拿的是服务器自己放进去的数据(通常由之前的代码逻辑产生)。
3. 应用场景:多租户与追踪
在多租户系统中,你可能有一个拦截器根据域名解析出 Tenant 对象并存入 Request。通过这个注解,所有下游的 Controller 都可以无感地获取当前租户信息。