欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot ResponseEntity標識Http響應方式

 更新時間:2024年07月10日 16:59:23   作者:fengyehongWorld  
這篇文章主要介紹了SpringBoot ResponseEntity標識Http響應方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

一. 說明

  • ResponseEntity用來標識整個Http響應,可以標識狀態(tài)碼,Head頭部信息,以及響應體。
  • ResponseEntity的優(yōu)先級高于@ResponseBody。

在返回值不是ResponseEntity的情況下才去檢查有沒有@ResponseBody注解。

如果響應類型是ResponseEntity可以不寫@ResponseBody注解,便可返回JSON數(shù)據或其他類型的數(shù)據,如果同時使用ResponseEntity和@ResponseBody注解也不會報錯。

  • ResponseEntity是在 org.springframework.http.HttpEntity 的基礎上添加了http status code(http狀態(tài)碼)。作用是和@ResponseStatus@ResponseBody結合起來的功能一樣的。
  • @ResponseBody可以直接返回JSON結果, @ResponseEntity不僅可以返回JSON結果,還可以返回自定義的HttpHeaders和HttpStatus。

二. ResponseEntity.ok().headers(響應頭).body(響應體)

可用于文件下載

與直接向HttpServletResponse中寫入OutputStream和header的效果相同

HttpServletResponse是servlet式的寫法,而ResponseEntity是Springt式的寫法

  • new ResponseEntity<>(響應體, 響應頭, 狀態(tài)碼) 是非簡寫方式
  • ResponseEntity.ok().headers(響應頭).body(響應體) 是簡寫方式
import org.springframework.core.io.ClassPathResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;

import java.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

@GetMapping("/testResponseEntity1")
public ResponseEntity<byte[]> testResponseEntity1() throws Exception {

    // 讀取本地的文件
    String filePath = "/temp/A110120119/測試文件.text";
    ClassPathResource readFile = new ClassPathResource(filePath);

    // 設置響應頭,把文件名稱放入響應頭中,確保文件可下載
    HttpHeaders headers = new HttpHeaders();
    headers.set("Content-Disposition", "attachment;filename=" + URLEncoder.encode(readFile.getFilename(), "UTF-8"));
    // 設置內容類型為「application/octet-stream」二進制流
    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);

    // 獲取File對象
    File file = readFile.getFile();
    Path path = Paths.get(file.toURI());
    // 獲取File對象的字節(jié)碼文件
    byte[] bytes = Files.readAllBytes(path);

    /*
     * 表示返回一個字節(jié)碼類型的響應
     * 同時設置了響應頭和狀態(tài)碼
     * */
    if (ObjectUtils.isEmpty(readFile.getFilename())) {
        // ??????簡寫形式
        return ResponseEntity.ok().headers(headers).body(bytes);
    }

    // ??????非簡寫形式
    return new ResponseEntity<>(bytes, headers, HttpStatus.OK);
}

三. ResponseEntity.ok(響應內容)

請求成功,直接把后臺的數(shù)據響應給前臺

@GetMapping("/testResponseEntity2")
public ResponseEntity<List<String>> testResponseEntity2() {

    List<String> list = Arrays.asList("1", "2");
    return ResponseEntity.ok(list);
}

與下面這種寫法 功能相同

@GetMapping("/testResponseEntity2")
@ResponseBody
public List<String> testResponseEntity2() {

    List<String> list = Arrays.asList("1", "2");
    return list;
}

四. ResponseEntity<Void>

  • HttpStatus.NO_CONTENT狀態(tài)碼為204,表示服務器成功的處理了請求,但是沒有返回任何內容

多用于 更新刪除 的時候,響應給前臺一個狀態(tài)碼,表示操作成功。

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

@GetMapping("/testResponseEntity3")
public ResponseEntity<Void> testResponseEntity3(String param) {

    // ?http狀態(tài)碼 204 (無內容) 服務器成功處理了請求,但沒有返回任何內容。
    if (ObjectUtils.isEmpty(param)) {
    	// ?簡寫方式
        return ResponseEntity.noContent().build();
    }
	
	// ?非簡寫方式
    return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}

五. ResponseEntity.status(狀態(tài)碼)

用于向前臺返回指定的狀態(tài)碼,還可以返回Header和響應內容

  • HttpStatus.CREATED201狀態(tài)碼表示請求成功并且服務器創(chuàng)建了新的資源。
@GetMapping("/testResponseEntity4")
public ResponseEntity<Void> testResponseEntity4() {
	
	// 向數(shù)據庫中插入數(shù)據
	// ......
	
    // ?http狀態(tài)碼 201 (已創(chuàng)建) 請求成功并且服務器創(chuàng)建了新的資源。
    return ResponseEntity.status(HttpStatus.CREATED).build();
}

@GetMapping("/testResponseEntity5")
public ResponseEntity<String> testResponseEntity5(String param) {
	
	// 如果參數(shù)不存在就返回默認的圖片url,并返回狀態(tài)碼201
    if (!ObjectUtils.isEmpty(param)) {
        return new ResponseEntity<>("默認的圖片URL", HttpStatus.CREATED);
    }
	
	// 向數(shù)據庫中插入圖片,并返回能訪問圖片地址的url
	// ......
	// ?用于插入數(shù)據成功之后返回數(shù)據給前臺

    // ?201 狀態(tài)碼,并返回圖片的url
    return ResponseEntity.status(HttpStatus.CREATED).body("圖片的url");
}

六. ResponseEntity.status(狀態(tài)碼).body(響應體)

  • HttpStatus.BAD_REQUEST表示狀態(tài)碼400,異常的請求。
@GetMapping("/testResponseEntity6")
public ResponseEntity<Map<String, Object>> testResponseEntity6(String param) {
	
	// 用來存放校驗信息的Map
    Map<String, Object> map = new HashMap<>();
	
	// 進行參數(shù)校驗
    if (param == null) {
    	// 參數(shù)為null,直接返回錯誤碼400
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
    } else if ("".equals(param.trim())){
    	// 參數(shù)為空字符串,返回錯誤碼400的同時,還返回錯誤信息
        map.put("errorMsg","參數(shù)為空");
        return ResponseEntity.badRequest().body(map);
    }

    // 200 狀態(tài)碼,并指定請求成功的響應體
    map.put("successMsg", "參數(shù)通過校驗");
	
    return ResponseEntity.status(HttpStatus.OK).body(map);
    
    // 這種寫法更加簡單,本質上和上面是一種寫法
    // return ResponseEntity.ok(map);
}

七. 前臺ajax

$.ajax({
    url: `請求URL`,
    type: '請求方式',
    // data: JSON.stringify(param),
    // 向服務器發(fā)送的數(shù)據類型
    // contentType: 'application/json;charset=utf-8',
    // dataType: 'json',
    success: function (data, status, xhr) {

        // 請求成功的響應體
        console.log(data);

        // 請求成功的狀態(tài)文字描述(success,nocontent等)
        console.log(status);

        // 請求成功的狀態(tài)碼(200,201,204等)
        const {
            status: stateCode
        } = xhr;
        console.log(stateCode);
    },
    error(xhr, status, error) {

        const {
            // 請求異常時的json格式響應體
            responseJSON,
            // 請求異常時的文本響應內容
            responseText,
            // 請求異常時的狀態(tài)碼
            status: stateCode
        } = xhr;
        console.log(responseJSON);
        console.log(responseText);
        console.log(stateCode);

        // 請求成功的狀態(tài)文字描述(error等)
        console.log(status);
    }
});

總結

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

相關文章

  • Mybatis-plus動態(tài)條件查詢QueryWrapper的使用案例

    Mybatis-plus動態(tài)條件查詢QueryWrapper的使用案例

    mybatis-plus框架功能很強大,把很多功能都集成了,下面這篇文章主要給大家介紹了關于Mybatis-plus動態(tài)條件查詢QueryWrapper的使用教程,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • Java 格式化輸出JSON字符串的2種實現(xiàn)操作

    Java 格式化輸出JSON字符串的2種實現(xiàn)操作

    這篇文章主要介紹了Java 格式化輸出JSON字符串的2種實現(xiàn)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 一篇文章帶你深入了解Java基礎(3)

    一篇文章帶你深入了解Java基礎(3)

    這篇文章主要給大家介紹了關于Java中方法使用的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-08-08
  • Intellij IDEA實現(xiàn)SpringBoot項目多端口啟動的兩種方法

    Intellij IDEA實現(xiàn)SpringBoot項目多端口啟動的兩種方法

    有時候使用springboot項目時遇到這樣一種情況,用一個項目需要復制很多遍進行測試,除了端口號不同以外,沒有任何不同。遇到這種情況怎么辦呢?這時候可以使用Intellij IDEA解決
    2018-06-06
  • Java Map的幾種循環(huán)方式總結

    Java Map的幾種循環(huán)方式總結

    這篇文章主要是對Java中Map的幾種循環(huán)方式進行了詳細的總結介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12
  • Mybatis查詢方法如何實現(xiàn)沒有返回值

    Mybatis查詢方法如何實現(xiàn)沒有返回值

    這篇文章主要介紹了Mybatis查詢方法如何實現(xiàn)沒有返回值,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • Java編程常見內存溢出異常與代碼示例

    Java編程常見內存溢出異常與代碼示例

    這篇文章主要介紹了Java編程常見內存溢出異常與代碼示例,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • SpringBoot使用jasypt加解密密碼的實現(xiàn)方法

    SpringBoot使用jasypt加解密密碼的實現(xiàn)方法

    這篇文章主要介紹了SpringBoot使用jasypt加解密密碼的實現(xiàn)方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • 解讀maven項目的打包方式

    解讀maven項目的打包方式

    這篇文章主要介紹了關于maven項目的打包方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Java中request對象常用方法匯總

    Java中request對象常用方法匯總

    這篇文章主要為大家詳細匯總了Java中request對象的常用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02

最新評論