其中一台Spring服务器具有一个用于下载文件的端点。该服务器是网关,因此它调用另一个服务器来获取文件。内部调用成功,并且文件内容返回到网关服务器。
为了保留内部调用的响应头,网关创建一个ResponseEntity
对象。这些标头包括content-type
,content-length
和content-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);
}
答案 0 :(得分:2)
我终于找到了问题。 @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
的其他人。