@RequestHeader
和 @CookieValue
是 Spring MVC 框架中用于从 HTTP 请求中提取数据的注解。它们的作用分别是从请求头(Headers)和 Cookie 中获取数据,并将其绑定到 Controller 方法的参数上。
1. @RequestHeader
注解
@RequestHeader
用于从 HTTP 请求头中提取数据,并将其绑定到 Controller 方法的参数上。
作用
- 从请求头中获取指定的字段值。
- 支持默认值设置,当请求头中不存在指定字段时,可以使用默认值。
使用场景
- 获取客户端信息,如
User-Agent
、Accept-Language
等。 - 获取自定义的请求头字段。
示例
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyController {
@GetMapping("/header")
public String getHeader(@RequestHeader("User-Agent") String userAgent) {
return "User-Agent: " + userAgent;
}
@GetMapping("/customHeader")
public String getCustomHeader(@RequestHeader(value = "X-Custom-Header", defaultValue = "default") String customHeader) {
return "X-Custom-Header: " + customHeader;
}
}
在这个例子中:
@RequestHeader("User-Agent")
会从请求头中获取User-Agent
字段的值,并绑定到userAgent
参数上。@RequestHeader(value = "X-Custom-Header", defaultValue = "default")
会从请求头中获取X-Custom-Header
字段的值,如果该字段不存在,则使用默认值"default"
。
常用属性
value
或name
:指定请求头字段的名称。required
:指定请求头字段是否必须存在,默认为true
。如果为true
且请求头中不存在该字段,会抛出MissingRequestHeaderException
。defaultValue
:指定默认值,当请求头中不存在指定字段时使用。
2. @CookieValue
注解
@CookieValue
用于从 HTTP 请求的 Cookie 中提取数据,并将其绑定到 Controller 方法的参数上。
作用
- 从 Cookie 中获取指定的值。
- 支持默认值设置,当 Cookie 中不存在指定字段时,可以使用默认值。
使用场景
- 获取用户的身份认证信息(如 Session ID)。
- 获取用户的偏好设置(如语言、主题等)。
示例
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyController {
@GetMapping("/cookie")
public String getCookie(@CookieValue("JSESSIONID") String sessionId) {
return "JSESSIONID: " + sessionId;
}
@GetMapping("/customCookie")
public String getCustomCookie(@CookieValue(value = "theme", defaultValue = "light") String theme) {
return "Theme: " + theme;
}
}
在这个例子中:
@CookieValue("JSESSIONID")
会从 Cookie 中获取JSESSIONID
的值,并绑定到sessionId
参数上。@CookieValue(value = "theme", defaultValue = "light")
会从 Cookie 中获取theme
的值,如果该 Cookie 不存在,则使用默认值"light"
。
常用属性
value
或name
:指定 Cookie 的名称。required
:指定 Cookie 是否必须存在,默认为true
。如果为true
且 Cookie 中不存在该字段,会抛出MissingCookieException
。defaultValue
:指定默认值,当 Cookie 中不存在指定字段时使用。
3. @RequestHeader
和 @CookieValue
的区别
特性 | @RequestHeader | @CookieValue |
---|---|---|
数据来源 | HTTP 请求头 | HTTP 请求的 Cookie |
使用场景 | 获取请求头字段(如 User-Agent) | 获取 Cookie 值(如 JSESSIONID) |
默认值支持 | 支持 | 支持 |
异常类型 | MissingRequestHeaderException | MissingCookieException |
4. 总结
@RequestHeader
:用于从 HTTP 请求头中提取数据,适用于获取客户端信息或自定义请求头字段。@CookieValue
:用于从 HTTP 请求的 Cookie 中提取数据,适用于获取用户的身份认证信息或偏好设置。- 两者都支持默认值设置,并且可以指定字段是否必须存在。
通过合理使用 @RequestHeader
和 @CookieValue
,可以方便地从 HTTP 请求中提取所需的数据,简化开发工作。
THE END
暂无评论内容