Rest 我可以向vnd.error添加其他字段吗?

Rest 我可以向vnd.error添加其他字段吗?,rest,spring-hateoas,hateoas,Rest,Spring Hateoas,Hateoas,在Spring HATEOAS中,可以返回如下所示的VndError对象: [ { "logref" : "some request id", "message" : "your request was incorrect." } ] [ { "logref" : "some request id", "message" : "your request was incorrect.", "additional" : { "some

在Spring HATEOAS中,可以返回如下所示的VndError对象:

[
  {
    "logref" : "some request id",
    "message" : "your request was incorrect."
  }
]
[
  {
    "logref" : "some request id",
    "message" : "your request was incorrect.",
    "additional" : {
      "some" : "additional",
      "payload" : "fields"
    }
  }
]
中提到了一些可选字段和必填字段,但没有提到添加其他字段

如果要将vnd.error有效负载扩展为如下所示:

[
  {
    "logref" : "some request id",
    "message" : "your request was incorrect."
  }
]
[
  {
    "logref" : "some request id",
    "message" : "your request was incorrect.",
    "additional" : {
      "some" : "additional",
      "payload" : "fields"
    }
  }
]

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

没有提到xsd的等价物:任何文档。i、 e.似乎没有扩展模式的方法。如果您只控制一个客户机,那么您可以“分叉”模式,并添加客户机知道存在的其他内容。但是,如果任何客户机都可以访问它,并且希望看到一个vnd.error,这就是它在看到application/vnd.error+json时所期望的,如果它不忽略解析器中的未知属性,它可能无法解析,甚至无法获得错误

另外,如果客户机不关心错误,而是希望在头之后重试,那么请求将包含不需要的内容

您可以创建一个新的端点/logref/maybe吗?客户机可以发送vnd.error logRef并获取更多信息,您可以将需要的任何信息发送回其中,因为这不是vnd.error响应

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


实际上,通过ThreadLocal错误向客户机公开实现细节可能是一个安全问题。内部服务器错误应该足够详细,以便服务器开发人员修复问题,而详细则依赖于客户端没有看到这些错误,这些错误可能包含敏感的实现细节。

规范不允许您执行的其他字段会做什么?添加有关异常的更多信息。logref字段允许一个唯一的请求ID,但我们也可以附加一个更复杂的诊断对象。谢谢,我确实想知道解析器是否能够处理这些添加。添加一个新的端点意味着我们必须存储diagnostics对象,而diagnostics对象仅仅是ThreadLocal的短暂信息