簡體   English   中英

如何在204 No Content響應上保留ResponseBody?

[英]How to keep ResponseBody on 204 No Content response?

我想返回204 no content http狀態代碼。 盡管我想添加一個自定義錯誤消息,其中提供了詳細說明為何不存在任何內容的細節。

問題:我正在使用spring-mvc ,並且在返回HttpStatus.NO_CONTENT類型時,響應主體始終被刪除,並且對於客戶端而言是空的!

@RestControllerAdvice
public class ExeptionHandler {
    @ExceptionHandler(Exception.class)
    @ResponseStatus(HttpStatus.NO_CONTENT)
    public Object handler(HttpServletRequest req, Exception e) {
        return new ResponseEntity<String>(e.getMessage(), HttpStatus.NO_CONTENT);
    }
}

如果我將類型更改為HttpStatus.NOT_FOUND則錯誤消息將顯示為響應正文。

如何使用204達到同樣的效果?

我想返回204無內容的HTTP狀態代碼。 盡管我想添加一個自定義錯誤消息,其中提供了詳細說明為何不存在任何內容的細節。

你不能

問題:我正在使用Spring MVC,並且在返回HttpStatus.NO_CONTENT類型時,響應主體始終被刪除,並且對於客戶端而言是空的!

那是預期的行為。

如果我將類型更改為HttpStatus.NOT_FOUND則錯誤消息將顯示為響應正文。 如何使用204達到同樣的效果?

您將無法使用204實現它。 您誤解了(並且可能濫用了)這樣的狀態代碼。 204的目的是指示服務器已成功滿足請求,並且響應有效負載中沒有其他要發送的內容

供參考,請參閱如何在RFC 7231中定義此狀態代碼:

6.3.5。 204沒有內容

狀態碼204 (無內容)指示服務器已成功滿足請求,並且響應有效內容正文中沒有其他要發送的內容。 [...]

204響應由標頭字段之后的第一個空行終止,因為它不能包含消息正文。 [...]


根據情況,您最好將404200與響應有效載荷中的空數組一起使用。 這個答案可能會給您一些見解。

204用於成功請求。 它應該沒有錯誤消息包括在內。

如果發生錯誤,則應使用其他HTTP代碼。

參見https://httpstatuses.com/204

204響應由標頭字段之后的第一個空行終止,因為它不能包含消息正文。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM