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

如何使用spring ResponseEntity處理http響應

 更新時間:2021年07月31日 16:05:50   作者:夢想畫家  
這篇文章主要介紹了如何使用spring ResponseEntity處理http響應的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

簡介

使用spring時,達到同一目的通常有很多方法,對處理http響應也是一樣。本文我們學習如何通過ResponseEntity設置http相應內容、狀態(tài)以及頭信息。

ResponseEntity

ResponseEntity標識整個http相應:狀態(tài)碼、頭部信息以及相應體內容。因此我們可以使用其對http響應實現完整配置。

如果需要使用ResponseEntity,必須在請求點返回,通常在spring rest中實現。ResponseEntity是通用類型,因此可以使用任意類型作為響應體:

@GetMapping("/hello")
ResponseEntity<String> hello() {
    return new ResponseEntity<>("Hello World!", HttpStatus.OK);
}

可以通過編程方式指明響應狀態(tài),所以根據不同場景返回不同狀態(tài):

@GetMapping("/age")
ResponseEntity<String> age(
  @RequestParam("yearOfBirth") int yearOfBirth) {
    if (isInFuture(yearOfBirth)) {
        return new ResponseEntity<>(
          "Year of birth cannot be in the future", 
          HttpStatus.BAD_REQUEST);
    }
    return new ResponseEntity<>(
      "Your age is " + calculateAge(yearOfBirth), 
      HttpStatus.OK);
}

另外,還可以設置http響應頭:

@GetMapping("/customHeader")
ResponseEntity<String> customHeader() {
    HttpHeaders headers = new HttpHeaders();
    headers.add("Custom-Header", "foo");
    return new ResponseEntity<>(
      "Custom header set", headers, HttpStatus.OK);
}

而且, ResponseEntity提供了兩個內嵌的構建器接口: HeadersBuilder 和其子接口 BodyBuilder。因此我們能通過ResponseEntity的靜態(tài)方法直接訪問。

最簡單的情況是相應包括一個主體及http 200響應碼:

@GetMapping("/hello")
ResponseEntity<String> hello() {
    return ResponseEntity.ok("Hello World!");
}

大多數常用的http 響應碼,可以通過下面static方法:

BodyBuilder accepted();
BodyBuilder badRequest();
BodyBuilder created(java.net.URI location);
HeadersBuilder<?> noContent();
HeadersBuilder<?> notFound();
BodyBuilder ok();

另外,可以能使用BodyBuilder status(HttpStatus status)和BodyBuilder status(int status) 方法設置http狀態(tài)。使用ResponseEntity BodyBuilder.body(T body)設置http響應體:

@GetMapping("/age")
ResponseEntity<String> age(@RequestParam("yearOfBirth") int yearOfBirth) {
    if (isInFuture(yearOfBirth)) {
        return ResponseEntity.badRequest()
            .body("Year of birth cannot be in the future");
    }
    return ResponseEntity.status(HttpStatus.OK)
        .body("Your age is " + calculateAge(yearOfBirth));
}

也可以自定義頭信息:

@GetMapping("/customHeader")
ResponseEntity<String> customHeader() {
    return ResponseEntity.ok()
        .header("Custom-Header", "foo")
        .body("Custom header set");
}

因為BodyBuilder.body()返回ResponseEntity 而不是 BodyBuilder,需要最后調用。注意使用HeaderBuilder 不能設置任何響應體屬性。

盡管ResponseEntity非常強大,但不應該過度使用。在一些簡單情況下,還有其他方法能滿足我們的需求,使代碼更整潔。

替代方法

@ResponseBody

典型spring mvc應用,請求點通常返回html頁面。有時我們僅需要實際數據,如使用ajax請求。這時我們能通過@ResponseBody注解標記請求處理方法,審批人能夠處理方法結果值作為http響應體。

@ResponseStatus

當請求點成功返回,spring提供http 200(ok)相應。如果請求點拋出異常,spring查找異常處理器,由其返回相應的http狀態(tài)碼。對這些方法增加@ResponseStatus注解,spring會返回自定義http狀態(tài)碼。

直接操作相應

Spring 也允許我們直接 javax.servlet.http.HttpServletResponse 對象;只需要申明其作為方法參數:

@GetMapping("/manual")
void manual(HttpServletResponse response) throws IOException {
    response.setHeader("Custom-Header", "foo");
    response.setStatus(200);
    response.getWriter().println("Hello World!");
}

但需要說明,既然spring已經提供底層實現的抽象和附件功能,我們不建議直接操作response。

總結:本文我們介紹了spring提供多種方式處理http響應,以及各自的優(yōu)缺點,希望對你有幫助。

ResponseEntity的基本簡介

1、ResponseEntity繼承了HttpEntity

可以添加HttpStatus狀態(tài)碼的HttpEntity的擴展類。被用于RestTemplate和Controller層方法

2、ResponseEntity可以定義返回的HttpStatus(狀態(tài)碼)

和HttpHeaders(消息頭:請求頭和響應頭)HttpStatus的狀態(tài)碼有以下幾種

3、ResponseEntity的優(yōu)先級高于@ResponseBody

在不是ResponseEntity的情況下才去檢查有沒有@ResponseBody注解。如果響應類型是ResponseEntity可以不寫@ResponseBody注解,寫了也沒有關系。

簡單的說@ResponseBody可以直接返回Json結果,@ResponseEntity不僅可以返回json結果,還可以定義返回的HttpHeaders和HttpStatus

public ResponseEntity<List<Category>> queryCategoriesByPid(@RequestParam(value = "pid",defaultValue = "0") Long pid){
        if(pid == null || pid.longValue()<0){
            // 響應400,相當于ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
            return ResponseEntity.badRequest().build();
        }
        //ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
       // ResponseEntity.notFound().build();
        // ResponseEntity.ok(null);
        List<Category> categoryList = this.categoryService.queryCategoriesByPid(pid);
        if(CollectionUtils.isEmpty(categoryList)){
            // 響應404
            return ResponseEntity.notFound().build();
        }
        return ResponseEntity.ok(categoryList);
    }

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Maven項目打包成可執(zhí)行Jar文件步驟解析

    Maven項目打包成可執(zhí)行Jar文件步驟解析

    這篇文章主要介紹了Maven項目如何打包成可執(zhí)行Jar文件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • shenyu怎么處理sign鑒權前置到網關

    shenyu怎么處理sign鑒權前置到網關

    這篇文章主要為大家介紹了shenyu怎么處理sign鑒權前置到網關方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Java數據結構之快速冪的實現

    Java數據結構之快速冪的實現

    快速冪是用來解決求冪運算的高效方式。本文將詳細為大家介紹如何利用Java實現快速冪,以及利用快速冪求解冪運算問題,需要的可以參考一下
    2022-03-03
  • 詳談java線程與線程、進程與進程間通信

    詳談java線程與線程、進程與進程間通信

    下面小編就為大家?guī)硪黄斦刯ava線程與線程、進程與進程間通信。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • SpringBoot如何整合mybatis-generator-maven-plugin 1.4.0

    SpringBoot如何整合mybatis-generator-maven-plugin 1.4.0

    這篇文章主要介紹了SpringBoot整合mybatis-generator-maven-plugin 1.4.0的實現方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-01-01
  • 解決IDEA2021版compiler.automake.allow.when.app.running不存在的問題

    解決IDEA2021版compiler.automake.allow.when.app.running不存在的問題

    很多文章介紹IntelliJ IDEA開啟熱部署功能都會寫到在IntelliJ IDEA中的注冊表中開啟compiler.automake.allow.when.app.running選項,此選項在IntelliJ IDEA 2021.2之后的版本遷移到高級設置中,下面看下設置方法
    2021-09-09
  • SpringBoot全局處理統(tǒng)一返回類型方式

    SpringBoot全局處理統(tǒng)一返回類型方式

    這篇文章主要介紹了SpringBoot全局處理統(tǒng)一返回類型方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Springboot通過圖片路徑形式獲取圖片

    Springboot通過圖片路徑形式獲取圖片

    這篇文章主要介紹了Springboot通過圖片路徑形式獲取圖片,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • Spring?Boot集成Milvus快速入門demo示例詳解

    Spring?Boot集成Milvus快速入門demo示例詳解

    Milvus是一種高性能向量數據庫,支持從筆記本到大型分布式系統(tǒng)的多環(huán)境運行,它以開源和云服務形式提供,是LFAI & Data Foundation的項目,采用Apache 2.0許可,Milvus特別支持高并行化和解耦的系統(tǒng)架構,使其能夠隨數據增長而擴展,支持各種復雜搜索功能,滿足企業(yè)級AI應用需求
    2024-09-09
  • mybatisplus 的SQL攔截器實現關聯查詢功能

    mybatisplus 的SQL攔截器實現關聯查詢功能

    大家都知道m(xù)ybatisplus不支持關聯查詢,后來學習研究發(fā)現mybatisplus的SQL攔截器可以實現這一操作,下面小編給大家分享我的demo實現基本的關聯查詢功能沒有問題,對mybatisplus關聯查詢相關知識感興趣的朋友一起看看吧
    2021-06-06

最新評論

瑞丽市| 罗甸县| 漠河县| 大邑县| 右玉县| 建始县| 东港市| 湘潭县| 嘉鱼县| 奇台县| 车险| 汤阴县| 日喀则市| 即墨市| 郓城县| 高州市| 齐河县| 商城县| 睢宁县| 乡宁县| 朔州市| 利川市| 观塘区| 墨玉县| 江口县| 青岛市| 新丰县| 长春市| 喀喇| 美姑县| 亳州市| 和平区| 钟祥市| 正蓝旗| 祁东县| 灵武市| 武隆县| 大石桥市| 南郑县| 讷河市| 惠东县|