国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - SpringBoot2中使用@RequestHeader獲取請求頭的方法

SpringBoot2中使用@RequestHeader獲取請求頭的方法

2022-03-06 01:05chushiyan Java教程

springMVC/SpringBoot中提供了@RequestHeader注解用來獲取請求頭。本文就詳細的來介紹一下如何使用,感興趣的可以了解下

springMVC/SpringBoot中提供了@RequestHeader注解用來獲取請求頭。

一、使用@RequestHeader獲取請求頭

(一)獲取某一個請求頭

例如,獲取accept-language請求頭:

?
1
2
3
4
5
6
@GetMapping("/getLanguage")
public Result test(@RequestHeader("accept-language") String language) {
    // ......
    
    return new Result(true, 600, language);
}

使用postman,沒有設置accept-language請求頭時,響應:

?
1
2
3
4
5
6
7
{
    "timestamp": "2019-12-3T20:43:58.971+0000",
    "status": 400,
    "error": "Bad Request",
    "message": "Missing request header 'accept-language' for method parameter of type String",
    "path": "/getLanguage"
}

添加了accept-language請求頭后,響應:

?
1
2
3
4
5
{
    "flag": true,
    "code": 600,
    "message": "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7"
}

(二)獲取數值型請求頭

?
1
2
3
4
@GetMapping("/num")
public Result getNumber(@RequestHeader("my-number") int myNumber) {
    return new Result(true, HttpStatus.OK.value(), String.valueOf(myNumber));
}

使用postman設置my-number請求頭值為1,響應:

?
1
2
3
4
5
{
    "flag": true,
    "code": 200,
    "message": "1"
}

(三)一次性獲取所有請求頭

1、使用Map接收所有請求頭

?
1
2
3
4
5
6
7
8
@GetMapping("/getHeaders")
public Result listAllHeaders(@RequestHeader Map<String, String> headers) {
    headers.forEach((key, value) -> {
        // 日志中輸出所有請求頭
        logger.info(String.format("Header '%s' = %s", key, value));
    });
    return new Result(true, HttpStatus.OK.value(), "");
}

使用postman請求該地址,控制臺打印:

2019-12-03 21:10:35,993 INFO  [http-nio-10000-exec-9] com.chushiyan.test.controller.HttpHeaderController: Header 'user-agent' = PostmanRuntime/7.20.1
2019-12-03 21:10:35,994 INFO  [http-nio-10000-exec-9] com.chushiyan.test.controller.HttpHeaderController: Header 'accept' = */*
2019-12-03 21:10:35,994 INFO  [http-nio-10000-exec-9] com.chushiyan.test.controller.HttpHeaderController: Header 'cache-control' = no-cache
2019-12-03 21:10:35,995 INFO  [http-nio-10000-exec-9] com.chushiyan.test.controller.HttpHeaderController: Header 'postman-token' = 47dce6dd-c082-47b0-8867-720e45205aa1
2019-12-03 21:10:35,995 INFO  [http-nio-10000-exec-9] com.chushiyan.test.controller.HttpHeaderController: Header 'host' = localhost:10000
2019-12-03 21:10:35,995 INFO  [http-nio-10000-exec-9] com.chushiyan.test.controller.HttpHeaderController: Header 'accept-encoding' = gzip, deflate
2019-12-03 21:10:35,996 INFO  [http-nio-10000-exec-9] com.chushiyan.test.controller.HttpHeaderController: Header 'connection' = keep-alive

2、使用MultiValueMap接收所有請求頭

一個請求頭存在多個值的時候,可以使用MultiValueMap接收所有請求頭

?
1
2
3
4
5
6
7
8
@GetMapping("/getHeaders2")
public Result multiValue(@RequestHeader MultiValueMap<String, String> headers) {
    headers.forEach((key, value) -> {
        logger.info(String.format(
                "Header '%s' = %s", key, value.stream().collect(Collectors.joining("/"))));
    });
    return new Result(true, HttpStatus.OK.value(), "");
}

3、使用HttpHeaders接收所用請求頭

?
1
2
3
4
5
6
7
@GetMapping("/getBaseUrl")
public Result getBaseUrl(@RequestHeader HttpHeaders headers) {
    // 獲取到了所有的請求頭,這里只是使用Host請求頭
    InetSocketAddress host = headers.getHost();
    String url = "http://" + host.getHostName() + ":" + host.getPort();
    return new Result(true, HttpStatus.OK.value(),url);
}

使用postman請求該地址,得到的響應:

?
1
2
3
4
5
{
    "flag": true,
    "code": 200,
    "message": "http://localhost:10000"
}

二、@RequestHeader注解詳解

@RequestHeader源碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package org.springframework.web.bind.annotation;
 
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
 
import org.springframework.core.annotation.AliasFor;
 
/**
 * Annotation which indicates that a method parameter should be bound to a web request header.
 *
 * <p>Supported for annotated handler methods in Spring MVC and Spring WebFlux.
 *
 * <p>If the method parameter is {@link java.util.Map Map&lt;String, String&gt;},
 * {@link org.springframework.util.MultiValueMap MultiValueMap&lt;String, String&gt;},
 * or {@link org.springframework.http.HttpHeaders HttpHeaders} then the map is
 * populated with all header names and values.
 *
 * @author Juergen Hoeller
 * @author Sam Brannen
 * @since 3.0
 * @see RequestMapping
 * @see RequestParam
 * @see CookieValue
 */
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestHeader {
 
   /**
    * Alias for {@link #name}.
    */
   @AliasFor("name")
   String value() default "";
 
   /**
    * The name of the request header to bind to.
    * @since 4.2
    */
   @AliasFor("value")
   String name() default "";
 
   /**
    * Whether the header is required.
    * <p>Defaults to {@code true}, leading to an exception being thrown
    * if the header is missing in the request. Switch this to
    * {@code false} if you prefer a {@code null} value if the header is
    * not present in the request.
    * <p>Alternatively, provide a {@link #defaultValue}, which implicitly
    * sets this flag to {@code false}.
    */
   boolean required() default true;
 
   /**
    * The default value to use as a fallback.
    * <p>Supplying a default value implicitly sets {@link #required} to
    * {@code false}.
    */
   String defaultValue() default ValueConstants.DEFAULT_NONE;
 
}

(一)name、value屬性

?
1
2
public Result test(@RequestHeader(name="accept-language") String language)
public Result test(@RequestHeader(value="accept-language") String language)

上面這兩行代碼效果相同。當然都可以省略為:(因為value是可以省略寫的)

?
1
public Result test(@RequestHeader("accept-language") String language)

因為從源碼中,可以看出name/value互為別名:

?
1
2
3
4
5
@AliasFor("name")
String value() default "";
 
@AliasFor("value")
String name() default "";

@AliasFor注解:

  • @AliasFor在同一個注解中成對使用,表示兩個屬性互為別名。比如上面的,value和name就是互為別名。
  • @AliasFor標簽有一些使用限制,比如要求互為別名的屬性的屬性值類型、默認值都是相同的。
  • 互為別名的注解必須成對出現,比如value屬性添加了@AliasFor(“name”),那么name屬性就必須添加@AliasFor(“value”)。

(二)required屬性

?
1
2
3
4
5
6
@GetMapping("/getHeader3")
public Result evaluateNonRequiredHeader(
        @RequestHeader(value = "chushiyan", required = false) String header) {
 
    return new Result(true,HttpStatus.OK.value(),"");
}

如果沒有添加required = false,當請求頭中沒有這個chushiyan請求頭時就會報錯。

(三)defaultValue屬性

可以使用defaultValue屬性指定默認值

?
1
2
3
4
5
6
@GetMapping("/getHeader3")
public Result evaluateNonRequiredHeader(
        @RequestHeader(value = "chushiyan", defaultValue = "hello") String header) {
 
    return new Result(true,HttpStatus.OK.value(),"");
}

到此這篇關于SpringBoot2中使用@RequestHeader獲取請求頭的方法的文章就介紹到這了,更多相關SpringBoot2 @RequestHeader獲取請求頭內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/chushiyan/article/details/103390406

延伸 · 閱讀

精彩推薦
  • Java教程淺談Springboot實現攔截器的兩種方式

    淺談Springboot實現攔截器的兩種方式

    本文詳細的介紹了Springboot攔截器的兩種方式實現,一種就是用攔截器,一種就是過濾器,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣...

    怪咖軟妹@11182021-11-25
  • Java教程Java設計模式之橋模式(Bridge模式)介紹

    Java設計模式之橋模式(Bridge模式)介紹

    這篇文章主要介紹了Java設計模式之橋模式(Bridge模式)介紹,本文講解了為什么使用橋模式、如何實現橋模式、Bridge模式在EJB中的應用等內容,需要的朋友可...

    junjie2552019-12-11
  • Java教程spring aop 攔截業務方法,實現權限控制示例

    spring aop 攔截業務方法,實現權限控制示例

    這篇文章主要介紹了spring aop 攔截業務方法,實現權限控制示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。...

    云在青山4142020-07-26
  • Java教程一文讀懂Spring Cloud-Hystrix

    一文讀懂Spring Cloud-Hystrix

    這篇文章主要介紹了通過一文讀懂Spring Cloud-Hystrix的相關知識,本文分步驟通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒...

    segmentfault11672021-08-18
  • Java教程JavaGUI模仿QQ聊天功能完整版

    JavaGUI模仿QQ聊天功能完整版

    這篇文章主要為大家詳細介紹了JavaGUI模仿QQ聊天功能完整版,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    KillerCodes4182021-09-26
  • Java教程身份證號碼驗證算法深入研究和Java實現

    身份證號碼驗證算法深入研究和Java實現

    這篇文章主要介紹了身份證號碼驗證算法深入研究和Java實現,本文講解了18身份證號碼的結構、根據17位數字本體碼獲取最后一位校驗碼程序實例等內容,需要...

    junjie5162019-12-24
  • Java教程spring MVC實踐需要注意的地方

    spring MVC實踐需要注意的地方

    這篇文章主要介紹了spring MVC實踐需要注意的地方,幫助大家更好的理解和學習使用spring MVC,感興趣的朋友可以了解下...

    吃水果毫不費力zz6722021-08-19
  • Java教程Java視頻格式轉化的實現方法

    Java視頻格式轉化的實現方法

    這篇文章主要為大家詳細介紹了Java視頻格式轉化的實現方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    liuyazhuang6612021-04-08
主站蜘蛛池模板: 国产乱码精品一区二区三 | 久久综合亚洲精品 | 另类亚洲专区 | 日本不卡免费新一二三区 | 国产一级黄色 | 91精品国产人妻国产毛片在线 | 99草视频 | 亚洲一区中文字幕 | 在线观看欧美一区 | 国产精品美女久久久久久久久久久 | 欧美天堂 | 精品久久久久久久久久久久 | 在线免费日韩 | 一区二区三区精品 | 久久天堂电影 | 欧美1区2区3区 | 久久久免费电影 | 综合久久亚洲 | 国产黄色精品 | 中文字幕综合 | 蜜桃一区| 能直接看的av网站 | 成人在线h | 欧美日韩亚洲一区 | 国产精品伦一区二区三级视频 | 黄色小视频在线免费观看 | 99精品一区| 久久久久久久国产精品 | 日日天天 | 欧美在线观看一区二区 | 性大毛片视频 | 日韩av中文字幕在线播放 | 欧美第一区 | 黄频免费在线观看 | 精品国产一区二区三区久久久蜜 | 激情视频网 | 精品久久国产老人久久综合 | av一区久久 | 国产精品视频一二三区 | 亚洲一区二区精品 | 久久综合伊人 |