SpringMVC(六):@RequestMapping下使用@RequestHeader綁定請求報頭的屬性值、@CookieValue綁定請求中的Cookie值

備註:我本地瀏覽器的報頭(Request Header)信息以下: html

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:zh-CN,zh;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Cookie:JSESSIONID=0BBEA8614215D6E206FB0F66B8DCE3D3; csrftoken=lrfHnPB6TGmnXW9DwWZxIB1ezBgSIuAORWbMaEigY3zExaJo9YHWgdSGtTctr1Zc; Orchrd-=%7B%22Exp-N42-Layouts%22%3A%22open%22%2C%22Exp-N42-Settings%22%3A%22open%22%7D
Host:localhost:8080
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36java

@RequestHeader包含屬性值:

--- value :參數名稱web

--- required :是否必須,默認爲true,表示請求參數中必須包含對應的參數,不然拋出異常。spring

--- defaultValue:當請求參數缺乏或者有請求參數但值爲空時,值採用該設置值。瀏覽器

請求頭包含若個屬性,服務器可根據請求頭屬性信息獲取客戶端的信息,經過@RequestHeader既能夠將請求頭的屬性值綁定處處理方法的入參中。服務器

示例:cookie

在HelloWord.java中添加方法testRequestHeader函數:session

測試1)測試報頭參數爲key,並且是必須,且該報文參數沒有被包含本地報文參數中。app

    @RequestMapping("/testRequestHeader")
    public String testRequestHeader(@RequestHeader(value = "key", required = true) String key) {
        System.out.println("testRequestHeader, key:" + key);
        return SUCCESS;
    }

訪問請求地址:http://localhost:8080/SpringMVC_01/class_requestmapping/testRequestHeader函數

拋出了異常:

HTTP Status 500 - Request processing failed; nested exception is org.springframework.web.bind.annotation.support.HandlerMethodInvocationException: Failed to invoke handler method [public java.lang.String com.dx.springlearn.handlers.HelloWord.testRequestHeader(java.lang.String)]; nested exception is java.lang.IllegalStateException: Missing header 'key' of type [java.lang.String]

測試2)修改測試1)中testRequestHeader代碼爲以下:

    @RequestMapping("/testRequestHeader")
    public String testRequestHeader(@RequestHeader(value = "key", required = true, defaultValue = "-999") String key) {
        System.out.println("testRequestHeader, key:" + key);
        return SUCCESS;
    }

訪問請求地址:http://localhost:8080/SpringMVC_01/class_requestmapping/testRequestHeader

請求正常響應(無異常拋出),打印信息爲:

testRequestHeader, key:-999

測試3)修改testRequestHeader代碼爲以下:

    @RequestMapping("/testRequestHeader")
    public String testRequestHeader(@RequestHeader(value = "key", required = true, defaultValue = "-999") String key,
            @RequestHeader(value = "Accept-Encoding") String ae) {
        System.out.println("testRequestHeader, key:" + key + ", Accept-Encoding:" + ae);
        return SUCCESS;
    }

訪問請求地址:http://localhost:8080/SpringMVC_01/class_requestmapping/testRequestHeader

請求正常響應(無異常拋出),打印信息爲:

testRequestHeader, key:-999, Accept-Encoding:gzip, deflate, sdch, br

 @CookieValue包含屬性值:

--- value :參數名稱

--- required :是否必須,默認爲true,表示請求參數中必須包含對應的參數,不然拋出異常。

--- defaultValue:當請求參數缺乏或者有請求參數但值爲空時,值採用該設置值。

@CookieValue可以讓處理方法入參綁定某個cookie值。

測試方法:

    @RequestMapping("/testCookieValue")
    public String testCookieValue(@CookieValue(value = "JSESSIONID", required = true, defaultValue = "-999") String jsessionId) {
        System.out.println("testCookieValue, JSESSIONID:" + jsessionId );
        return SUCCESS;
    }

測試url:http://localhost:8080/SpringMVC_01/class_requestmapping/testCookieValue

打印結果:testCookieValue, JSESSIONID:A48F72D870ABF4AECDEE1631F3D3F89C

相關文章
相關標籤/搜索