我可以在vnd.error中添加其他字段吗?

时间:2019-06-20 10:34:26

标签: rest spring-hateoas hateoas

在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"
    }
  }
]

根据规范,格式仍然有效吗?

1 个答案:

答案 0 :(得分:1)

没有提及与xsd:any(记录在here中)等效的内容。即似乎没有一种扩展架构的方法。如果仅由您控制一个客户端,则可以“分叉”架构并添加客户端将知道存在的其他内容。但是,如果任何客户端都可以访问它并且期望一个vnd.error,则这是它在看到application/vnd.error+json时所期望的,并且如果它不忽略其解析器中的未知属性,则可能无法解析并且不能解析。甚至得到错误。

此外,如果客户端不关心该错误,而是希望使用Retry-After标头,则该请求将包含不需要的内容。

也许可以创建一个新的端点/logref/吗?客户端可以发送vnd.error logRef并获取更多信息,并且您可以发送任何您需要的信息,因为它不会是vnd.error的响应。

最终,logRef用于服务器端。如果他们希望跟进该错误,则任何客户端都只会对向其用户和logRef显示消息感兴趣,但是我怀疑ThreadLocal错误对客户端可能没有任何意义。 logRef指向的内容仅对服务器有意义。

实际上,通过ThreadLocal错误向客户端公开实现细节可能是出于安全考虑。服务器内部错误应足够冗长,以使服务器开发人员可以解决此问题,而内部冗长则取决于客户端看不到这些错误,而这些错误可能包含敏感的实施细节。