如何在接受不同Accept标头值的REST端点中处理错误响应。

如何在接受不同Accept标头值的REST端点中处理错误响应。,rest,error-handling,content-type,http-accept-header,Rest,Error Handling,Content Type,Http Accept Header,我正在尝试向REST端点添加新的内容类型。目前它只返回json,但我现在需要能够返回一个CSV文件 据我所知,最好的方法是使用带有值text/csv的Accept标题,然后添加一个能够对此做出反应的转换器,并将返回的正文转换为正确的csv表示 我已经能够做到这一点,但我在处理异常时遇到了问题。直到知道为止,所有返回的错误都在json中。前端希望任何500状态代码包含带有错误的特定主体。但是现在,通过添加将application/json或text/csv返回到我的端点的选项,如果出现错误,用于转

我正在尝试向REST端点添加新的内容类型。目前它只返回json,但我现在需要能够返回一个CSV文件

据我所知,最好的方法是使用带有值
text/csv
Accept
标题,然后添加一个能够对此做出反应的转换器,并将返回的正文转换为正确的
csv
表示

我已经能够做到这一点,但我在处理异常时遇到了问题。直到知道为止,所有返回的错误都在
json
中。前端希望任何
500
状态代码包含带有错误的特定主体。但是现在,通过添加将
application/json
text/csv
返回到我的端点的选项,如果出现错误,用于转换主体的转换器将是
jackson
转换器或我的自定义转换器,具体取决于传递的
Accept
头。此外,我的前端需要读取返回的
内容类型
,并根据返回的表示类型解析值

这是处理这种情况的正常方法吗

更快的解决方法是忽略
Accept
标题,并包含一个指示预期格式的url参数。通过这种方式,我可以直接在控制器中更改响应的
内容类型和数据解析,因为
GET
请求不包含任何
Accept
头,它可以接受任何内容。代码的某些部分已经这样做了,其中唯一期望的响应格式是
CSV
,因此我很难为
Accept
标题的使用进行辩护,除非有更好的方法来处理

我的前端需要读取返回的内容类型,并根据返回的表示类型解析值

这是处理这种情况的正常方法吗

例如,描述了用于描述问题的通用格式。因此,服务器将在响应中发送问题的
application/problem+json
application/problem+xml
表示,以及标题中的常用元数据

理解
application/problem+json
的消费者可以用in解析数据,并将问题的有用描述转发给用户/日志。不了解该表示的使用者仅限于对标头中的信息进行操作

一个更快的解决方法是忽略Accept标头,并包含一个指示预期格式的url参数

这也很好——更准确地说,您可以使用不同的资源来负责支持的每种不同的媒体类型


回顾一下,它描述了内容协商的语义,这可能会很有用。

我不希望有人回答说使用参数也可以,但实际上我发现了与此相关的讨论,还添加了第三个选项,即使用扩展()。据我所知,鉴于对议定书和其他文件的解释存在大量的讨论,最后是务实/学术之间的权衡。