在Spring HATEOAS中,您可以返回一个VndError
对象,如下所示:
[
{
"logref" : "some request id",
"message" : "your request was incorrect."
}
]
mime type specification提到了一些可选字段和必填字段,但没有提及添加其他字段。
如果要扩展vnd.error
负载,使其看起来像这样:
[
{
"logref" : "some request id",
"message" : "your request was incorrect.",
"additional" : {
"some" : "additional",
"payload" : "fields"
}
}
]
根据规范,格式仍然有效吗?
答案 0 :(得分:1)
没有提及与xsd:any
(记录在here中)等效的内容。即似乎没有一种扩展架构的方法。如果仅由您控制一个客户端,则可以“分叉”架构并添加客户端将知道存在的其他内容。但是,如果任何客户端都可以访问它并且期望一个vnd.error
,则这是它在看到application/vnd.error+json
时所期望的,并且如果它不忽略其解析器中的未知属性,则可能无法解析并且不能解析。甚至得到错误。
此外,如果客户端不关心该错误,而是希望使用Retry-After
标头,则该请求将包含不需要的内容。
也许可以创建一个新的端点/logref/
吗?客户端可以发送vnd.error
logRef
并获取更多信息,并且您可以发送任何您需要的信息,因为它不会是vnd.error
的响应。
最终,logRef用于服务器端。如果他们希望跟进该错误,则任何客户端都只会对向其用户和logRef显示消息感兴趣,但是我怀疑ThreadLocal错误对客户端可能没有任何意义。 logRef指向的内容仅对服务器有意义。
实际上,通过ThreadLocal错误向客户端公开实现细节可能是出于安全考虑。服务器内部错误应足够冗长,以使服务器开发人员可以解决此问题,而内部冗长则取决于客户端看不到这些错误,而这些错误可能包含敏感的实施细节。