如何处理接受不同 Accept header 值的 REST 端点中的错误响应。
How to handle error responses in a REST endpoint that accepts different Accept header values.
我正在尝试向 REST 端点添加新的内容类型。目前它只有 returns json 但我现在需要能够 return 也是一个 CSV 文件。
据我所知,最好的方法是使用 Accept
header 和值 text/csv
然后添加一个能够对此做出反应的转换器并将 returned body 转换为正确的 CSV
表示。
我已经能够做到这一点,但是我在处理异常时遇到了问题。直到知道,所有错误 returned 都在 json
中。前端期望任何 500
状态代码包含特定的 body 错误。但是现在,通过将选项添加到 return application/json
或 text/csv
到我的端点,以防出现错误,用于转换 body 的转换器正在运行成为 jackson
转换器或我的自定义转换器,具体取决于通过的 Accept
header。此外,我的前端将需要读取 content-type
returned 并根据 returned 的表示类型解析值。
这是处理这种情况的正常方法吗?
一个更快的解决方法是忘记 Accept
header 并包含一个 url 参数来指示预期的格式。这样做,我将能够直接在控制器中更改响应的 content-type
和数据解析,因为 GET
请求将不包含任何 Accept
header 它将能够接受任何东西。代码的某些部分已经这样做了,其中唯一预期的响应格式是 CSV
所以我将很难捍卫 Accept
header 的使用,除非有更好的处理方式。
my frontend is going to need to read the content-type returned and parse the value based on the type of representation returned.
Is this the normal approach to handle this situation?
是的。
例如,RFC 7807描述了描述问题的通用格式。因此,服务器将在响应中发送 application/problem+json
或 application/problem+xml
问题表示,以及 headers.
中的常用元数据
理解 application/problem+json
的消费者可以使用 in 解析数据,并将对问题的有用描述转发给 user/logs whatever。 不 理解的消费者仅限于根据 headers 中的信息采取行动。
A faster workaround would be to forget about the Accept header and include a url parameter indicating the format expected.
这也很好 - 更准确地说,您可以让不同的资源负责您支持的每个不同 media-types。
复习一下描述内容协商语义的 section 3.4 of RFC 7231 可能会有用。
我正在尝试向 REST 端点添加新的内容类型。目前它只有 returns json 但我现在需要能够 return 也是一个 CSV 文件。
据我所知,最好的方法是使用 Accept
header 和值 text/csv
然后添加一个能够对此做出反应的转换器并将 returned body 转换为正确的 CSV
表示。
我已经能够做到这一点,但是我在处理异常时遇到了问题。直到知道,所有错误 returned 都在 json
中。前端期望任何 500
状态代码包含特定的 body 错误。但是现在,通过将选项添加到 return application/json
或 text/csv
到我的端点,以防出现错误,用于转换 body 的转换器正在运行成为 jackson
转换器或我的自定义转换器,具体取决于通过的 Accept
header。此外,我的前端将需要读取 content-type
returned 并根据 returned 的表示类型解析值。
这是处理这种情况的正常方法吗?
一个更快的解决方法是忘记 Accept
header 并包含一个 url 参数来指示预期的格式。这样做,我将能够直接在控制器中更改响应的 content-type
和数据解析,因为 GET
请求将不包含任何 Accept
header 它将能够接受任何东西。代码的某些部分已经这样做了,其中唯一预期的响应格式是 CSV
所以我将很难捍卫 Accept
header 的使用,除非有更好的处理方式。
my frontend is going to need to read the content-type returned and parse the value based on the type of representation returned.
Is this the normal approach to handle this situation?
是的。
例如,RFC 7807描述了描述问题的通用格式。因此,服务器将在响应中发送 application/problem+json
或 application/problem+xml
问题表示,以及 headers.
理解 application/problem+json
的消费者可以使用 in 解析数据,并将对问题的有用描述转发给 user/logs whatever。 不 理解的消费者仅限于根据 headers 中的信息采取行动。
A faster workaround would be to forget about the Accept header and include a url parameter indicating the format expected.
这也很好 - 更准确地说,您可以让不同的资源负责您支持的每个不同 media-types。
复习一下描述内容协商语义的 section 3.4 of RFC 7231 可能会有用。