2

使用 spring boot 和 javax.validation(不是 spring 验证)验证对 REST 端点的 put 调用的问题。

您在资源中有以下方法:

@PutMapping(...)
public Response getResult(@RequestBody @Valid myBody, @PathVariable @MyIdValidation long id) {

}

当我调用该方法时,myBody会得到验证,并 MethodArgumentNotValidException在我的异常处理程序中得到一个。但是参数没有id得到验证!

只有当myBody有效时,id才会被验证。

我找到的唯一解决方案是不使用@Valid,并自己实施身体的验证。

有更好的解决方案吗?

TIA 基布

4

2 回答 2

1

我不认为 Spring MVC 框架本身可以做到这一点,因为框架处理@RequestBody和其他人喜欢@RequestParam@PathVariable不同地使用不同的组件。此外,这两个部分都需要断开连接,因为您可能不喜欢验证方法的所有参数。

@RequestBody由 处理org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor并从那里调用验证 & 参数或路径变量验证由org.springframework.validation.beanvalidation.MethodValidationInterceptor.

因此,在我看来,控制器方法的方法参数由框架一一处理并且在逻辑上是断开的,因此这些验证不能结合在一起。

于 2020-02-06T11:21:30.243 回答
0

我已经在这个问题上付出了一些努力,并在github上启动了一个项目

可以一站式验证,但您需要一种不同的方法。检查项目并进行测试。

贵部

于 2020-02-21T10:31:46.117 回答