1步验证请求正文和请求参数?

时间:2020-02-06 07:41:01

标签: java spring-boot javax.validation

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

您的资源中具有以下方法:

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

}

当我调用该方法时,myBody得到验证,并且在异常处理程序中得到MethodArgumentNotValidException。但是参数id未得到验证

只有myBody有效,id也会得到验证。

我发现的唯一解决方案是不使用@Valid,而是自己执行对身体的验证。

有更好的解决方案吗?

TIA Kibu

2 个答案:

答案 0 :(得分:1)

Spring MVC框架本身并不认为它可行,因为框架通过使用不同的组件来处理request.json() 和其他类似@RequestBody@RequestParam的框架。另外,两个部分都需要断开连接,因为您可能不希望验证方法的所有参数。

@PathVariable@RequestBody处理,并从那里调用验证,并为参数或org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor完成路径变量验证。

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

答案 1 :(得分:0)

我已为此问题付出了一些努力,并在github上开始了一个项目

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

木布