網絡接口返回類ResponseEntity
- 簡介
- 方法
- 獲取工廠方法
- ResponseEntity.ok()返回BodyBuilder
- 返回文字信息
- 返回類對象(Spring自動轉換為json格式)
- 返回空內容?
- ResponseEntity.notFound()返回HeadersBuilder
- 返回文字信息
- status(HttpStatus)返回BodyBuilder
- noContent()返回HeadersBuilder
- 設置響應頭信息中的指定屬性和值
- headers(headers)
- body(resource)
- 使用示例
簡介
使用的org.springframework.http.ResponseEntity;
,是 Spring Framework 提供的、一個Spring中的通用類。它用于構建 HTTP 響應的方式、返回一個 HTTP 狀態碼為 200 OK 的響應,并且可以附帶返回的數據。
待補入此博客。
方法
ResponseEntity 用于表示整個 HTTP 響應,包括:
- 狀態碼 (HTTP status code)
- 頭部信息 (HTTP headers)
- 響應體 (HTTP body)
方法返回值的類型ResponseEntity<中的類型>
取決于接口返回值body(中的類型),因為public abstract <T> ResponseEntity<T> body( @Nullable T body )
。
獲取工廠方法
ResponseEntity.ok()返回BodyBuilder
ResponseEntity.ok()
是一個靜態工廠方法、用于返回一個 ResponseEntity. BodyBuilder
來生成具體的請求成功返回信息,使用該 ResponseEntity. BodyBuilder
生成的都是狀態碼為 200 OK、請求成功的響應。
返回文字信息
return ResponseEntity.ok("Operation successful.");
該接口響應的返回信息,如下圖所示。
返回類對象(Spring自動轉換為json格式)
如果返回的對象是User類,Spring會自動將其轉換為JSON格式(前提是項目中有Jackson或類似的庫支持)。
return ResponseEntity.ok(new FileRecord("filename","path",new Date()));
請求該接口收到的返回信息,如下圖所示。
返回空內容?
返回一個HTTP 200響應,但沒有響應體。
//因為ResponseEntity.ok()返回的是 ResponseEntity.BodyBuilder,所以相當于BodyBuilder.build();
return ResponseEntity.ok().build();
請求該接口收到的返回信息(為空、下圖的1
為postman的行數標記而非接口返回信息),如下圖所示。
ResponseEntity.notFound()返回HeadersBuilder
ResponseEntity.notFound()
自認也是一個靜態工廠方法、用于返回一個 ResponseEntity. HeadersBuilder<?>
來生成具體的404 notFound
返回信息,使用該 ResponseEntity. BodyBuilder
生成的都是狀態碼為 404 notFound
、請求資源未找到“Requested resource could not be found. 的響應。
返回文字信息
return ResponseEntity.notFound().build();
該接口響應的返回信息,如下圖所示。
status(HttpStatus)返回BodyBuilder
ResponseEntity.status(HttpStatus)
自認也是一個靜態工廠方法、用于返回一個ResponseEntity. BodyBuilder
來生成具體的HttpStatus
類返回信息,使用該 ResponseEntity. BodyBuilder
生成的都是狀態碼為指定HttpStatus
的響應。
本例中,返回類型ResponseEntity<中的類型>
取決于接口返回值body(中的類型),因為public abstract <T> ResponseEntity<T> body( @Nullable T body )
public ResponseEntity<String> downloadFile(@PathVariable String filename) {
// 返回 404 和錯誤消息
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("User not found.");
該接口響應的返回信息,如下圖所示。
noContent()返回HeadersBuilder
ResponseEntity.noContent()
自認也是一個靜態工廠方法、用于返回一個ResponseEntity. HeadersBuilder
來通過status(HttpStatus.NO_CONTENT)
生成類返回信息,使用該 ResponseEntity. HeadersBuilder
生成的都是狀態碼為HTTP 204 No Content
的響應。
本例中,返回類型ResponseEntity<中的類型>
取決于接口返回值body(中的類型),因為public abstract <T> ResponseEntity<T> body( @Nullable T body )
return ResponseEntity.noContent().build();
設置響應頭信息中的指定屬性和值
比如設置content-type使用HttpHeaders.CONTENT_TYPE
:
return ResponseEntity.ok().header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE).build();
請求該接口收到的返回信息,下圖紅框中的內容是上面設置的響應頭信息,如下圖所示。
如果修改上述代碼
return ResponseEntity.ok().header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_GRAPHQL_VALUE).build();
請求該接口收到的返回信息,此時下圖響應頭信息發生了變化,如下圖紅框所示。
headers(headers)
由…調用,返回``。自定義響應頭 如果需要自定義響應頭,可以鏈式調用 header() 方法:
HttpHeaders headers = new HttpHeaders();
//下載文件所需
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + encodedFileName + "\"");
//
return ResponseEntity.ok().headers(headers).body(resource);
body(resource)
由ResponseEntity. BodyBuilder
調用,返回 ResponseEntity<T>
HttpHeaders headers = new HttpHeaders();
FileSystemResource resource = new FileSystemResource(file);
return ResponseEntity.ok().headers(headers).body(resource);
使用示例
@GetMapping("/download/{filename:.+}")public ResponseEntity<FileSystemResource> downloadFile(@PathVariable String filename) {// 假設文件存儲在項目的files目錄下File file = new File("files/" + filename);if (!file.exists()) {return ResponseEntity.status(HttpStatus.NOT_FOUND).build();}FileSystemResource resource = new FileSystemResource(file);HttpHeaders headers = new HttpHeaders();headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + file.getName());return ResponseEntity.ok().headers(headers).body(resource);}