Spring 使用 @RequestHeader 獲取請(qǐng)求頭常用方式
Spring 提供了@RequestHeader 注解用來獲取請(qǐng)求頭。
1. 獲取單個(gè)請(qǐng)求頭
例如,獲取 user-id 請(qǐng)求頭
("/getSingleHeader")public Map<String, Object> getSingleHeader(("user-id") String userId){Map<String, Object> result = new HashMap<>();result.put("code", 0);result.put("msg", "success");result.put("userId", userId);????????return?result;}
測(cè)試
curl -X POST \??http://127.0.0.1:8080/getSingleHeader?\-H 'user-id: A10010'
2. 一次性獲取所有請(qǐng)求頭
方式一:使用 Map 接收所有請(qǐng)求頭
@RequestMapping("/getAllHeaders")public Map<String, Object> listAllHeaders(@RequestHeader Map<String, String> headers) {Map<String, Object> result = new HashMap<>();headers.forEach((key, value) -> {// 日志中輸出所有請(qǐng)求頭System.out.println(String.format("Header '%s' = %s", key, value));});result.put("code", 0);result.put("msg", "success");result.put("headers", headers);return result;}
測(cè)試
curl -X POST \http://127.0.0.1:8080/getAllHeaders \-H 'company-id: 1001' \-H 'user-id: A10010'
日志打印
Header 'host' = 127.0.0.1:8080Header 'connection' = keep-aliveHeader 'content-length' = 0Header 'user-id' = A10010Header?'company-id'?=?1001
方式二:使用 MultiValueMap 接收所有請(qǐng)求頭
("/listHeaders")public Map<String, Object> listHeaders( MultiValueMap<String, String> headers) {Map<String, Object> result = new HashMap<>();headers.forEach((key, value) -> {// 日志中輸出所有請(qǐng)求頭System.out.println(String.format("Header '%s' = %s", key, value));});result.put("code", 0);result.put("msg", "success");result.put("headers", headers);????????return?result;}
測(cè)試
curl -X POST \http://127.0.0.1:8080/listHeaders \-H 'company-id: 1001' \-H 'user-id: A10010'
日志打印
Header 'host' = [127.0.0.1:8080]Header 'connection' = [keep-alive]Header 'content-length' = [0]Header?'user-id'?=?[A10010]Header?'company-id'?=?[1001]
可以發(fā)現(xiàn)如果一個(gè)請(qǐng)求頭存在多個(gè)值的時(shí),可以使用 MultiValueMap 接收所有請(qǐng)求頭。查看?MultiValueMap 源碼,發(fā)現(xiàn)?MultiValueMap?實(shí)現(xiàn)了?Map
方式三:使用 HttpHeaders 接收所用請(qǐng)求頭
("/getAllHttpHeaders")public?Map<String,?Object>?getAllHttpHeaders(?HttpHeaders?headers)?{headers.forEach((key, value) -> {// 日志中輸出所有請(qǐng)求頭System.out.println(String.format("getAllHttpHeaders '%s' = %s", key, value));});Map<String, Object> result = new HashMap<>();result.put("code", 0);result.put("msg", "success");result.put("headers", headers);return result;}
測(cè)試
curl -X POST \http://127.0.0.1:8080/getAllHttpHeaders \-H 'company-id: 1001' \-H 'user-id: A10010'
日志打印
getAllHttpHeaders 'host' = [127.0.0.1:8080]getAllHttpHeaders 'connection' = [keep-alive]getAllHttpHeaders 'content-length' = [0]getAllHttpHeaders 'user-id' = [A10010]getAllHttpHeaders 'company-id' = [1001]
查看 HttpHeaders?源碼發(fā)現(xiàn)?MultiValueMap
如果在項(xiàng)目中需要接收多個(gè)請(qǐng)求,使用?MultiValueMap 和 HttpHeaders 的選擇,可以節(jié)省參數(shù)個(gè)數(shù),使得代碼整潔;當(dāng)然,如果就接受一兩個(gè)請(qǐng)求頭,直接使用?RequestHeader? 注解就可以。
記得點(diǎn)「贊」和「在看」↓
愛你們
評(píng)論
圖片
表情
