私はJava spring mvcアプリケーションに取り組んでいます。この方法で、コントローラーのメソッドの1つにCookieを設定しました。
@RequestMapping(value = {"/news"}, method = RequestMethod.GET)
public ModelAndView news(Locale locale, Model model, HttpServletResponse response, HttpServletRequest request) throws Exception {
...
response.setHeader("Set-Cookie", "test=value; Path=/");
...
modelAndView.setViewName("path/to/my/view");
return modelAndView;
}
これは正常に機能しており、ブラウザコンソールにtest
という名前と値 "value"のCookieが表示されます。今、私は他の方法で名前でクッキー値を取得したい。 test
Cookieの値を取得するにはどうすればよいですか?
最も簡単な方法は、@CookieValue
アノテーションを使用してコントローラーで使用することです。
@RequestMapping("/hello")
public String hello(@CookieValue("foo") String fooCookie) {
// ...
}
それ以外の場合は、Spring org.springframework.web.util.WebUtils
を使用してサーブレットリクエストから取得できます。
WebUtils.getCookie(HttpServletRequest request, String cookieName)
ところで、質問に貼り付けられたコードは少し洗練される可能性があります。 #setHeader()
を使用する代わりに、これははるかにエレガントです。
response.addCookie(new Cookie("test", "value"));
org.springframework.web.util.WebUtils.getCookie(HttpServletRequest, String)
を使用することもできます。
private String getCookieValue(HttpServletRequest req, String cookieName) {
return Arrays.stream(req.getCookies())
.filter(c -> c.getName().equals(cookieName))
.findFirst()
.map(Cookie::getValue)
.orElse(null);
}
Spring MVCはすでにHttpServletRequest
オブジェクトを提供します。Cookie[]
を返すgetCookies()
メソッドがあるので、それを反復処理できます。
private String extractCookie(HttpServletRequest req) {
for (Cookie c : req.getCookies()) {
if (c.getName().equals("myCookie"))
return c.getValue();
}
return null;
}
クッキーには値で取得するメソッドがありません
Cookie cookie[]=request.getCookies();
Cookie cook;
String uname="",pass="";
if (cookie != null) {
for (int i = 0; i < cookie.length; i++) {
cook = cookie[i];
if(cook.getName().equalsIgnoreCase("loginPayrollUserName"))
uname=cook.getValue();
if(cook.getName().equalsIgnoreCase("loginPayrollPassword"))
pass=cook.getValue();
}
}