如何在204 No Content响应上保留ResponseBody?

mem*_*und 1 java spring spring-mvc httpresponse

我想返回204 no contenthttp状态代码。尽管我想添加一个自定义错误消息,其中提供了详细说明为何不存在任何内容的细节。

问题:我正在使用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);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我将类型更改为例如,HttpStatus.NOT_FOUND则错误消息将显示为响应正文。

如何使用204达到同样的效果?

cas*_*lin 7

我想返回一个204无内容的HTTP状态代码。尽管我想添加一个自定义错误消息,其中提供了详细说明为何不存在任何内容的细节。

你不能

问题:我正在使用Spring MVC,并且在返回HttpStatus.NO_CONTENT类型时,响应主体始终被删除,并且对于客户端而言是空的!

那是预期的行为。

如果我将类型更改为例如,HttpStatus.NOT_FOUND则错误消息将显示为响应正文。如何使用204达到同样的效果?

您将无法通过实现它204。您误解了(并且可能滥用了)这样的状态代码。的目的204是指示服务器已成功满足请求,并且响应有效负载中没有其他要发送的内容

供参考,请参阅如何在RFC 7231中定义此状态代码:

6.3.5。204没有内容

204(无内容)状态代码表明服务器已成功完成了请求,并没有额外的内容在响应有效载荷给全身。[...]

204响应由报头字段之后的第一空行终止,因为它不能包含消息体。[...]


根据情况,最好在响应有效负载中使用404200使用空数组。这个答案可能会给您一些见解。


Dom*_*omo 3

204 表示请求成功。它应该不包含错误消息。

如果发生错误,则应使用不同的 HTTP 代码。

请参阅https://httpstatuses.com/204

204 响应由标头字段后的第一个空行终止,因为它不能包含消息正文。