You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为204(NO_CONTENT)响应添加自定义头部及内容?

问题本质

HTTP 204(No Content)的规范明确要求响应体必须为空,所以无论你怎么尝试在204响应中添加响应体,都会被HTTP协议或客户端忽略。你之前添加的响应头没生效,可能是客户端未正确读取响应头,或代码配置存在其他问题,但核心矛盾是204本身不支持响应体。

可行实现方案

方案一:改用200 OK状态码返回响应体

这是最符合HTTP规范的做法,200状态码允许携带响应体:

@ApiResponses(value = {
        @ApiResponse(responseCode = "200", content = {@Content(schema = @Schema(implementation = String.class))}, description = "Successful")
})
@DeleteMapping("/Users/{id}")
public ResponseEntity<String> deleteUser(@PathVariable("id") String id) {
    userService.deleteUser(id);
    return ResponseEntity.ok("Successfully deleted");
}

方案二:坚持用204,通过响应头传递消息

如果必须保留204状态码,只能通过响应头传递信息,同时要修正Api注解使其符合204的规范(content需为空):

@ApiResponses(value = {
        @ApiResponse(responseCode = "204", content = {}, description = "Successfully deleted")
})
@DeleteMapping("/Users/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable("id") String id) {
    userService.deleteUser(id);
    return ResponseEntity.noContent()
            .header("X-Message", "Successfully deleted")  // 用标准自定义头前缀X-避免冲突
            .build();
}

注意:客户端需要通过读取响应头X-Message来获取提示信息,而非解析响应体。

方案三:自定义Spring响应处理(不推荐)

如果一定要打破HTTP规范在204中添加响应体,可以通过自定义ResponseBodyAdvice实现,但这种做法可能导致部分客户端(如浏览器、第三方HTTP库)无法正确解析响应,引发兼容性问题:

@ControllerAdvice
public class CustomResponseAdvice implements ResponseBodyAdvice<Object> {
    @Override
    public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
        // 仅对deleteUser方法生效
        return returnType.getMethod().getName().equals("deleteUser");
    }

    @Override
    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
        // 设置204状态码并强制写入响应体
        response.setStatusCode(HttpStatus.NO_CONTENT);
        return "Successfully deleted";
    }
}

再次提醒:此方案违反HTTP标准,谨慎使用。

内容的提问来源于stack exchange,提问作者Jack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 12:10:57