Servlet API 方式
package world.xuewei.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; /** * 第一个控制器 * * @author 薛伟 * @since 2023/10/30 16:18 */ @Controller public class CookieController { @RequestMapping("/cookie") public String cookie(HttpServletRequest request) { Cookie[] cookies = request.getCookies(); for (Cookie cookie : cookies) { String name = cookie.getName(); if ("Token".equals(name)) { // 获取到指定 Cookie String value = cookie.getValue(); System.out.println(name); System.out.println(value); } } return "index"; } }
@CookieValue 注解
@CookieValue
注解是 SpringMVC 框架中的一个注解,用于从请求的 Cookie 中获取值并绑定到方法参数或模型属性上。
使用 @CookieValue
注解时,你需要指定要获取的 Cookie 的名称。当请求被处理时,SpringMVC 会自动解析 Cookie,并将对应名称的 Cookie 值绑定到方法参数或模型属性上。
如果请求中不存在指定名称的 Cookie,cookieValue
参数将会被设置为 null
(如果指定了 required=false
)或抛出异常(默认)(如果未指定 required=false
)。
除了获取单个 Cookie 值外,@CookieValue
注解还支持以下功能:
- 指定默认值:可以使用
defaultValue
属性为参数指定默认值,当请求中不存在指定名称的 Cookie 时,将使用该默认值。 - 支持类型转换:
@CookieValue
注解可以将 Cookie 值转换为不同的类型,例如int
、boolean
、Date
等。如果无法转换,则会抛出异常。 - 属性绑定:可以使用
@CookieValue
注解将 Cookie 值绑定到模型属性上,从而在视图中使用该属性。
需要注意的是,@CookieValue
注解只能用于处理简单类型的 Cookie 值。如果需要处理复杂的 Cookie 结构,可以考虑使用 javax.servlet.http.Cookie
类或自定义注解与拦截器来实现。
package world.xuewei.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.CookieValue; import org.springframework.web.bind.annotation.RequestMapping; /** * 第一个控制器 * * @author 薛伟 * @since 2023/10/30 16:18 */ @Controller public class CookieController { @RequestMapping("/cookie") public String cookie(@CookieValue(value = "Token") String token) { System.out.println("token = " + token); return "index"; } }