2015-10-14 9 views
16

私はjava spring mvcアプリケーションを開発中です。私はこのように私のコントローラの方法のいずれかでクッキーを設定していますjava - 春のmvcで名前でクッキー値を取得

@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と値を「値」でクッキーを見ることができます。今、私は他の方法で名前でクッキー値を取得したいと思います。 testクッキーの値を取得するにはどうすればよいですか?

+0

あなたはmeskobalazs年代やryanpの答えのいずれかを受け入れる必要があります。 – Frans

+0

あなたは本当に@Fransのような答えを受け入れる必要があります、それは同じ問題を持つ他の人が正しい答えを見つけるのに役立ちます –

答えて

3

Spring MVCはすでにHttpServletRequestオブジェクトを提供していますが、それはを返すgetCookies()メソッドを持っていますので、それを反復することができます。

+0

別の方法がありますか?私はクッキー配列を反復したくない。なぜなら、それは大きな配列なのだから。 – hamed

+0

クッキーが1つの文字列に格納されているので、フレームワークで手作業で反復処理しなくても、フレームワークはそれを実行します。 – meskobalazs

41

最も簡単な方法は、@CookieValue注釈付きコントローラでそれを使用している:

@RequestMapping("/hello") 
public String hello(@CookieValue("foo") String fooCookie) { 
    // ... 
} 

そうでない場合は、あなたがちなみに春org.springframework.web.util.WebUtils

WebUtils.getCookie(HttpServletRequest request, String cookieName) 

を使用してサーブレット要求からそれを得ることができ、問題に貼り付けられたコードを少し洗練させることができました。代わりに#setHeader()を使用しての、これははるかにエレガントです:あなたはまた、org.springframework.web.util.WebUtils.getCookie(HttpServletRequest, String)を使用することができ、この

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();     
}  
} 
0

クッキー。

5

を試す値で取得する方法を持っているdoesntの

response.addCookie(new Cookie("test", "value")); 
1
private String extractCookie(HttpServletRequest req) { 
      for (Cookie c : req.getCookies()) { 
       if (c.getName().equals("myCookie")) 
        return c.getValue(); 
       } 
      return null; 
     } 
3
private String getCookieValue(HttpServletRequest req, String cookieName) { 
    return Arrays.stream(req.getCookies()) 
      .filter(c -> c.getName().equals(cookieName)) 
      .findFirst() 
      .map(Cookie::getValue) 
      .orElse(null); 
} 
関連する問題