最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年10月29日 10:51:17   作者:chushiyan  
springMVC/SpringBoot中提供了@RequestHeader注解用來獲取請求頭。本文就詳細的來介紹一下如何使用,感興趣的可以了解下

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

一、使用@RequestHeader獲取請求頭

(一)獲取某一個請求頭

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

@GetMapping("/getLanguage")
public Result test(@RequestHeader("accept-language") String language) {
    // ......
    
    return new Result(true, 600, language);
}

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

{
    "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請求頭后,響應:

{
    "flag": true,
    "code": 600,
    "message": "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7"
} 

(二)獲取數值型請求頭

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

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

{
    "flag": true,
    "code": 200,
    "message": "1"
}

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

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

@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請求該地址,控制臺打?。?/p>

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接收所有請求頭

@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接收所用請求頭

@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請求該地址,得到的響應:

{
    "flag": true,
    "code": 200,
    "message": "http://localhost:10000"
}

二、@RequestHeader注解詳解

@RequestHeader源碼如下:

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屬性

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

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

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

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

   @AliasFor("name")
   String value() default "";

   @AliasFor("value")
   String name() default "";

@AliasFor注解:

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

(二)required屬性

@GetMapping("/getHeader3")
public Result evaluateNonRequiredHeader(
        @RequestHeader(value = "chushiyan", required = false) String header) {

    return new Result(true,HttpStatus.OK.value(),"");
}

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

(三)defaultValue屬性

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

@GetMapping("/getHeader3")
public Result evaluateNonRequiredHeader(
        @RequestHeader(value = "chushiyan", defaultValue = "hello") String header) {

    return new Result(true,HttpStatus.OK.value(),"");
}

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

相關文章

  • SpringMVC攔截器零基礎掌握

    SpringMVC攔截器零基礎掌握

    攔截器(Interceptor)是一種動態(tài)攔截方法調用的機制,在SpringMVC中動態(tài)攔截控制器方法的執(zhí)行。本文將詳細講講SpringMVC中攔截器的概念及入門案例,感興趣的可以嘗試一下
    2023-03-03
  • springboot擴展MVC的方法

    springboot擴展MVC的方法

    今天給大家?guī)淼氖顷P于Java的相關知識,文章圍繞著springboot擴展MVC的方法展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Javaweb-HttpServletResponse的sendRedirectch重定向方式

    Javaweb-HttpServletResponse的sendRedirectch重定向方式

    這篇文章主要介紹了Javaweb-HttpServletResponse的sendRedirectch重定向方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java實現單例設計模式方法解析

    Java實現單例設計模式方法解析

    這篇文章主要介紹了Java實現單例設計模式方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • Java中System.setProperty()用法與實際應用場景

    Java中System.setProperty()用法與實際應用場景

    System.setProperty是Java中用于設置系統(tǒng)屬性的方法,它允許我們在運行時為Java虛擬機(JVM)或應用程序設置一些全局的系統(tǒng)屬性,下面這篇文章主要給大家介紹了關于Java中System.setProperty()用法與實際應用場景的相關資料,需要的朋友可以參考下
    2024-04-04
  • JDK源碼之PriorityQueue解析

    JDK源碼之PriorityQueue解析

    這篇文章主要為大家詳細介紹了JDK源碼之PriorityQueue,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Java基于redis和mysql實現簡單的秒殺(附demo)

    Java基于redis和mysql實現簡單的秒殺(附demo)

    這篇文章主要介紹了Java基于redis和mysql實現簡單的秒殺(附demo),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • 探究springboot中的TomcatMetricsBinder

    探究springboot中的TomcatMetricsBinder

    springboot的TomcatMetricsBinder主要是接收ApplicationStartedEvent然后創(chuàng)建TomcatMetrics執(zhí)行bindTo進行注冊,TomcatMetrics主要注冊了globalRequest、servlet、cache、threadPool、session相關的指標,本文給大家介紹的非常詳細,需要的朋友參考下吧
    2023-11-11
  • SpringBoot獲取客戶端的IP地址的實現示例

    SpringBoot獲取客戶端的IP地址的實現示例

    在Web應用程序中,獲取客戶端的IP地址是一項非常常見的需求,本文主要介紹了SpringBoot獲取客戶端的IP地址的實現示例,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • 詳解springboot配置多個redis連接

    詳解springboot配置多個redis連接

    Spring Boot為Redis, MongoDB, Elasticsearch, Solr和Gemfire提供自動配置。本文詳細介紹了springboot配置多個redis連接,有興趣的可以了解一下。
    2017-04-04

最新評論

肇东市| 房山区| 孝昌县| 西盟| 额敏县| 长治县| 彭山县| 饶河县| 遂宁市| 绥滨县| 永胜县| 合川市| 津南区| 长乐市| 巴楚县| 鹤壁市| 柯坪县| 固原市| 巍山| 故城县| 宜城市| 宁蒗| 赤峰市| 慈溪市| 琼结县| 西宁市| 昂仁县| 墨竹工卡县| 陕西省| 汝城县| 荃湾区| 忻州市| 平塘县| 沂水县| 邯郸市| 天峨县| 平阳县| 永昌县| 依安县| 班戈县| 古田县|