Spring 数据 REST Bean 验证
Spring Data REST Bean Validation
考虑一个 Person
实体,其 属性 name
被注释为 @NotNull
。然后是一个简单的 PersonRepository
并且这个 repo 公开了 Spring 数据 Rest.
当我 POST
创建一个新的 Person
时,如果 name
属性 是 null
,则会按预期发生 ValidationException
。但我在客户端实际得到的是一个 内部服务器错误 (500),消息是一个 TransactionSystemException
,它在异常链中发生得晚得多。
我希望得到的是 Bad Request (400),其中包含实际的 ValidationException
以及所有有用的信息,以便客户可以知道问题出在哪里发布的数据。
似乎有一种方法可以将自定义验证器附加到 SDR,如 here 所述。但问题是,这不是自定义验证器,它是标准的 bean 验证,在要求存储库保存数据时发生。所以我不太确定这两者是如何结合在一起的。
所以问题:
- 我有什么选择可以让客户知道在使用 SDR 时提交的数据有什么问题?。诸如哪些字段无效以及每个字段的错误是什么之类的事情会很棒。
- 有没有关于这方面的例子?
非常感谢。
您需要的是一个合适的ExceptionHandler
,它将处理后端异常并向前端客户端发送有意义的富消息(json/xml)。
看看这个git repository
考虑一个 Person
实体,其 属性 name
被注释为 @NotNull
。然后是一个简单的 PersonRepository
并且这个 repo 公开了 Spring 数据 Rest.
当我 POST
创建一个新的 Person
时,如果 name
属性 是 null
,则会按预期发生 ValidationException
。但我在客户端实际得到的是一个 内部服务器错误 (500),消息是一个 TransactionSystemException
,它在异常链中发生得晚得多。
我希望得到的是 Bad Request (400),其中包含实际的 ValidationException
以及所有有用的信息,以便客户可以知道问题出在哪里发布的数据。
似乎有一种方法可以将自定义验证器附加到 SDR,如 here 所述。但问题是,这不是自定义验证器,它是标准的 bean 验证,在要求存储库保存数据时发生。所以我不太确定这两者是如何结合在一起的。
所以问题:
- 我有什么选择可以让客户知道在使用 SDR 时提交的数据有什么问题?。诸如哪些字段无效以及每个字段的错误是什么之类的事情会很棒。
- 有没有关于这方面的例子?
非常感谢。
您需要的是一个合适的ExceptionHandler
,它将处理后端异常并向前端客户端发送有意义的富消息(json/xml)。
看看这个git repository