面试题:Spring 中的 @RequestHeader 和 @CookieValue 注解的作用是什么?

@RequestHeader@CookieValue 是 Spring MVC 框架中用于从 HTTP 请求中提取数据的注解。它们的作用分别是从请求头(Headers)和 Cookie 中获取数据,并将其绑定到 Controller 方法的参数上。


1. @RequestHeader 注解

@RequestHeader 用于从 HTTP 请求头中提取数据,并将其绑定到 Controller 方法的参数上。

作用

  • 从请求头中获取指定的字段值。
  • 支持默认值设置,当请求头中不存在指定字段时,可以使用默认值。

使用场景

  • 获取客户端信息,如 User-AgentAccept-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"

常用属性

  • valuename:指定请求头字段的名称。
  • 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"

常用属性

  • valuename:指定 Cookie 的名称。
  • required:指定 Cookie 是否必须存在,默认为 true。如果为 true 且 Cookie 中不存在该字段,会抛出 MissingCookieException
  • defaultValue:指定默认值,当 Cookie 中不存在指定字段时使用。

3. @RequestHeader@CookieValue 的区别

特性@RequestHeader@CookieValue
数据来源HTTP 请求头HTTP 请求的 Cookie
使用场景获取请求头字段(如 User-Agent)获取 Cookie 值(如 JSESSIONID)
默认值支持支持支持
异常类型MissingRequestHeaderExceptionMissingCookieException

4. 总结

  • @RequestHeader:用于从 HTTP 请求头中提取数据,适用于获取客户端信息或自定义请求头字段。
  • @CookieValue:用于从 HTTP 请求的 Cookie 中提取数据,适用于获取用户的身份认证信息或偏好设置。
  • 两者都支持默认值设置,并且可以指定字段是否必须存在。

通过合理使用 @RequestHeader@CookieValue,可以方便地从 HTTP 请求中提取所需的数据,简化开发工作。

THE END
点赞15 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容