end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

SpringBoot for java で、http headerやcookieを取得

以下の通り、

  • @RequestHeader や @CookieValue から取得
  • HttpServletRequest 経由で取得

の2種類があるみたい

package jp.co.sexy.bknkouhei.action;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloAction {
    static protected Logger logger =
            LogManager.getLogger(new Object(){}.getClass());

    @RequestMapping(value="/hello", method=RequestMethod.GET)
    public ModelAndView index(ModelAndView modelview) {

        logger.info("HOGEHOGE");

        modelview.setViewName("hello/index");
        return modelview;
    }

    @RequestMapping(value="/hello2", method=RequestMethod.GET)
    public ModelAndView index2(
            @RequestHeader(name="User-Agent",required=false) String userAgent,
            @CookieValue(name="JSESSIONID",required=false) String jSessionId,
            ModelAndView modelview) {

        logger.info("USER_AGENT:"+ userAgent );
        logger.info("JSESSIONID:"+ jSessionId);

        modelview.setViewName("hello/index");
        return modelview;
    }

    @RequestMapping(value="/hello3", method=RequestMethod.GET)
    public ModelAndView index3(HttpServletRequest httpRequest,
            ModelAndView modelview) {

        logger.info("HEADER>USER_AGENT:"+ httpRequest.getHeader("User-Agent"));

        Cookie[] cookies = httpRequest.getCookies();
        for (int i = 0; i<cookies.length; i++) {
            logger.info("COOKIE>"+ cookies[i].getName() +":"+cookies[i].getValue() );
        }

        modelview.setViewName("hello/index");
        return modelview;
    }

    @RequestMapping(value="/hello", method=RequestMethod.POST)
    public ModelAndView send(
            BindingResult errors,
            ModelAndView modelview) {

        logger.info("START This method.");

        String msg = "";

        // validation errorがある場合、メッセージ等を取得
        if(errors.hasErrors()){
            logger.error("This method has error.");

            for (FieldError fieldErr : errors.getFieldErrors()) {
                msg += "Field:" + fieldErr.getField();
                msg += " x Code:" + fieldErr.getCode();
                msg += " x Msg:" + fieldErr.getDefaultMessage();
                msg += "<hr/>";
            }
        }

        logger.info("MSG" + msg);

        modelview.addObject("msg",msg);
        modelview.setViewName("hello/index");
        return modelview;
    }
}