忽略在 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
注释上使用 produces
和 consumes
属性,但没有成功。我发现的其他答案使用全局配置或与 HttpResponse
混淆。如果可能的话,我想使用带有注释的更具声明性的方法。
谢谢!
听起来您需要按如下方式实现单个 REST 端点:
在第一次请求时,启动后台作业以生成报告。
JSON 响应已 returned 表示已请求生成报告。
如果后台作业尚未完成,后续请求将 return 一个 JSON 响应,指示正在生成报告。如果可能,可以在响应中包含进度指示器(例如 25%
)。
如果后台作业失败,后续请求将return一个JSON响应指示失败原因。
否则,后续请求将return生成的报告,并带有适当的Content-Type
。
现在是重要部分:所有请求必须包括Accept
header列表两者application/json
和一种或多种支持的报告格式(例如application/pdf
、text/csv
),否则406 Not Acceptable
是returned。
质量值 (;q=
) 可用于指示报告格式的偏好。
由于不同的客户端可能需要不同格式的相同报告,因此服务器应支持生成多个报告文件。
例如如果收到 Accept: application/pdf, application/json;q=0.1
的请求,系统将开始生成 PDF。如果使用 Accept: text/csv, application/json;q=0.1
收到另一个请求,系统将开始并行或排队生成 CSV 文件。
后续请求将忽略 pending/completed 不可接受的报告。例如如果收到第三个请求 Accept: text/csv;q=0.5, application/pdf, application/json;q=0.1
,系统将开始生成 CSV 文件,系统将 return 生成 PDF 的状态响应,如果完成则下载 PDF。
我有这样的东西:
@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
注释上使用 produces
和 consumes
属性,但没有成功。我发现的其他答案使用全局配置或与 HttpResponse
混淆。如果可能的话,我想使用带有注释的更具声明性的方法。
谢谢!
听起来您需要按如下方式实现单个 REST 端点:
在第一次请求时,启动后台作业以生成报告。
JSON 响应已 returned 表示已请求生成报告。如果后台作业尚未完成,后续请求将 return 一个 JSON 响应,指示正在生成报告。如果可能,可以在响应中包含进度指示器(例如
25%
)。如果后台作业失败,后续请求将return一个JSON响应指示失败原因。
否则,后续请求将return生成的报告,并带有适当的
Content-Type
。
现在是重要部分:所有请求必须包括Accept
header列表两者application/json
和一种或多种支持的报告格式(例如application/pdf
、text/csv
),否则406 Not Acceptable
是returned。
质量值 (;q=
) 可用于指示报告格式的偏好。
由于不同的客户端可能需要不同格式的相同报告,因此服务器应支持生成多个报告文件。
例如如果收到 Accept: application/pdf, application/json;q=0.1
的请求,系统将开始生成 PDF。如果使用 Accept: text/csv, application/json;q=0.1
收到另一个请求,系统将开始并行或排队生成 CSV 文件。
后续请求将忽略 pending/completed 不可接受的报告。例如如果收到第三个请求 Accept: text/csv;q=0.5, application/pdf, application/json;q=0.1
,系统将开始生成 CSV 文件,系统将 return 生成 PDF 的状态响应,如果完成则下载 PDF。