Eine übliche Praxis bestand darin, Cookies von HttpServletRequest abzurufen und daraus abzurufen. Es sieht aus wie das:
CookieController.java
@GetMapping("cookies3")
public String showCookies3(HttpServletRequest httpServletRequest) {
Cookie[] cookies = httpServletRequest.getCookies();
Arrays.stream(cookies).forEach(cookie -> System.out.println(cookie.getValue()));
return VIEW_NAME;
}
Mit Spring können Sie es jedoch etwas einfacher machen.
Setzen Sie den Cookie entsprechend.
CookieController.java
private final String VIEW_NAME = "demo/cookie/index";
@GetMapping("/")
public String index(HttpServletResponse httpServletResponse) {
httpServletResponse.addCookie(new Cookie("key1", "value1"));
return VIEW_NAME;
}
Sie können es einfach erhalten, indem Sie die CookieValue-Annotation wie unten gezeigt verwenden. Das Argument ist der Schlüsselwert des Cookies.
CookieController.java
private final String VIEW_NAME = "demo/cookie/index";
@GetMapping("cookies1")
public String showCookies1(@CookieValue("key1") String cookieValue) {
System.out.println(cookieValue);
return VIEW_NAME;
}
Bei der obigen Schreibmethode tritt jedoch ein Laufzeitfehler auf, wenn das Cookie gelöscht wird und nicht abgerufen werden kann. ※Resolved [org.springframework.web.bind.MissingRequestCookieException: Missing cookie 'key1' for method parameter of type String])
Daher kann dies vermieden werden, indem für @CookieValue die erforderliche Anforderung auf false gesetzt wird (Standard ist erforderlich = true), wie unten gezeigt.
In diesem Fall wird im Argument jedoch null festgelegt. Durch Angabe des Attributs defaultValue kann der Standardwert angegeben werden, wenn er nicht aus dem Cookie abgerufen werden kann.
CookieController.java
private final String VIEW_NAME = "demo/cookie/index";
@GetMapping("cookies2")
public String showCookies2(
@CookieValue(name = "key1", required = false, defaultValue = "default value1") String cookieValue) {
System.out.println(cookieValue);
return VIEW_NAME;
}
das ist alles.
Recommended Posts