基于本文回答

播面 播面

文图音视,全方位拆解八股文
0
评论

@RequestHeader 和 @CookieValue 注解的作用分别是什么?

知识点图片

这两个注解都是 Spring MVC 框架中用于从 HTTP 请求中提取特定信息的注解。它们通常用在 Controller(控制器)方法的参数上。

简单来说:

  • @RequestHeader 用于获取 请求头(Header) 中的值。
  • @CookieValue 用于获取 Cookie 中的值。

下面是详细的解释和代码示例:


1. @RequestHeader

作用

将 HTTP 请求头(Request Header)中的某个属性值映射到 Controller 方法的参数上。

常用场景

  • 获取认证信息(如 Authorization 头中的 Token)。
  • 获取客户端信息(如 User-Agent)。
  • 获取主机信息(Host)。
  • 获取内容类型或编码(Content-Type, Accept-Language)。

代码示例

java
@GetMapping("/headerInfo")
public String getHeaderInfo(
        // 1. 获取名为 "User-Agent" 的请求头
        @RequestHeader("User-Agent") String userAgent,
        
        // 2. 获取名为 "Accept-Language" 的请求头
        @RequestHeader("Accept-Language") String language,
        
        // 3. 获取名为 "My-Custom-Header" 的头,如果不存在则使用默认值 "default"
        @RequestHeader(value = "My-Custom-Header", defaultValue = "default") String customHeader,
        
        // 4. 获取所有请求头,映射为 Map
        @RequestHeader Map<String, String> allHeaders
) {
    System.out.println("User Agent: " + userAgent);
    System.out.println("Language: " + language);
    return "success";
}

2. @CookieValue

作用

将 HTTP 请求中携带的 Cookie 值映射到 Controller 方法的参数上。

常用场景

  • 获取会话 ID(如 JSESSIONID)。
  • 获取用户在客户端保存的偏好设置。
  • 获取用于自动登录的 Token。

代码示例

java
@GetMapping("/cookieInfo")
public String getCookieInfo(
        // 1. 获取名为 "JSESSIONID" 的 Cookie 值
        @CookieValue("JSESSIONID") String sessionId,
        
        // 2. 获取名为 "user_preference" 的 Cookie,如果不存在不报错(required=false@CookieValue(value = "user_preference", required = false) String userPref,
        
        // 3. 将 Cookie 映射为 javax.servlet.http.Cookie 对象(可以获取更多信息如 path, domain)
        @CookieValue("JSESSIONID") Cookie cookieObj
) {
    System.out.println("Session ID: " + sessionId);
    if (userPref != null) {
        System.out.println("User Preference: " + userPref);
    }
    return "success";
}

3. 共同属性与注意事项

这两个注解拥有相同的三个关键属性:

属性名 类型 描述
value (或 name) String 指定要获取的 Header 或 Cookie 的名称。
required boolean 默认为 true。如果请求中缺少该 Header/Cookie,Spring 会抛出 400 Bad Request 异常。如果设置为 false,则参数值为 null
defaultValue String 如果请求中缺少该 Header/Cookie,则使用此默认值(此时 required 属性会被忽略)。

总结对比

特性 @RequestHeader @CookieValue
数据来源 HTTP 协议的 Header 部分 HTTP 协议 Header 中的 Cookie 字段
主要用途 获取元数据(如认证Token、客户端类型、编码格式) 获取状态数据(如 SessionID、用户标识)
类型转换 Spring 会自动尝试将 String 转换为参数类型(如 int, long, Date 等) 同左
00:00
00:00