繁体   English   中英

在 Spring REST WS 中忽略接受 header

[英]Ignore accept header in Spring REST WS

我有这样的事情:

@RestController
public class MyController {

    @GetMapping("/myAddress")
    public Response generateReportAsync(...) {
         ...
    }

}

此 web 服务根据请求的Accept header 生成报告文件(pdf、xls、csv...)。 由于生成是异步执行的,因此返回的响应最初实际上是 JSON,稍后可以访问该报告。

我的问题是,当我调用这个传递Accept header (如application/pdf )时,我收到了 406,因为 WS 回复了 JSON。 有没有什么办法可以强制 JSON 回复我收到的任何Accept header 只针对此特定映射?

我尝试过使用GetMapping注释上的producesconsumes属性,但没有运气。 我发现的其他答案使用全局配置或与HttpResponse 如果可能的话,我想对注释使用更具声明性的方法。

谢谢!

听起来您需要实现一个 REST 端点,其工作方式如下:

  • 在第一次请求时,将启动后台作业以生成报告。
    返回 JSON 响应,指示已请求生成报告。

  • 如果后台作业尚未完成,后续请求将返回 JSON 响应,指示正在生成报告。 如果可能,可以在响应中包含一个进度指示器(例如25% )。

  • 如果后台作业失败,后续请求将返回 JSON 响应,指示失败的原因。

  • 否则,后续请求将返回生成的报告,并带有适当Content-Type

现在重要的部分:所有请求必须包括Accept header列出application/json一种或多种支持的报告格式(例如application/pdftext/csv ),否则返回406 Not Acceptable

质量值 ( ;q= ) 可用于指示报告格式的偏好。


由于不同的客户端可能需要不同格式的相同报告,服务器应该支持生成多个报告文件。

例如,如果接收到带有Accept: application/pdf, application/json;q=0.1的请求,系统将开始生成 PDF。 如果接收到另一个请求Accept: text/csv, application/json;q=0.1 ,系统将开始生成 CSV 文件,并行或排队。

后续请求将忽略不可接受的待处理/已完成报告。 例如,如果收到第三个请求Accept: text/csv;q=0.5, application/pdf, application/json;q=0.1 ,系统将开始生成 CSV 文件,系统将返回 PDF 生成的状态响应,或者如果完成,请下载 PDF。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM