java - 下载文件的 Spring 端点成功(200),但调用/错误端点(406)

标签 java spring rest spring-boot

其中一个 Spring 服务器有一个用于下载文件的端点。该服务器是一个网关,因此它调用另一台服务器来获取文件。内部调用成功,文件内容返回给网关服务器。

为了保留内部调用的响应 header ,网关创建一个 ResponseEntity 对象。这些 header 包括 content-typecontent-lengthcontent-disposition

问题是,当网关端点返回时,请求会以某种方式重定向到 /error 端点,该端点返回状态代码 406。

这是端点代码:

@GetMapping(path = "/download", produces = APPLICATION_OCTET_STREAM_VALUE)
@ResponseStatus(code = HttpStatus.OK, reason = "Success")
public ResponseEntity<byte[]> downloadAttachment(
    @RequestParam String name,
    @RequestParam String referenceId)
{
    return internalService.downloadFile(referenceId, name);
}

最佳答案

终于找到问题了。 @ResponseStatus 注释会覆盖自定义 ResponseEntity。事实上,这实际上记录在注释的 Javadoc 中:

The status code is applied to the HTTP response when the handler
method is invoked and overrides status information set by other means,
like {@code ResponseEntity} or {@code "redirect:"}.

我希望这能够帮助其他在同一端点上意外使用 ResponseEntity@ResponseStatus 的人。

关于java - 下载文件的 Spring 端点成功(200),但调用/错误端点(406),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51868414/

相关文章:

java - RabbitMQ 消息签名

spring security permitAll 仍在考虑在 Authorization header 中传递的 token ,如果 token 无效则返回 401

java - J2EE 7 Rest 客户端中的属性而不是值

java - 如何在 Junit 中使用 @InjectMocks 和 @Autowired 注释

javascript - Spring mvc 加载 JS 时出现 Uncaught SyntaxError : Unexpected token <

rest - 拒绝不受支持的 API 客户端时的 HTTP 状态代码

forms - 如何从 HTML 表单调用 RESTful 服务?

java - 如何仅通过泛型类型 T 创建实例

java - 如何创建重叠的背景和前景图像?

java - 在 java 1.4 中覆盖方法时如何避免 "unused param"警告?