Java 在1个步骤中验证请求正文和请求参数?
使用spring boot和javax.validation(不是spring验证)验证对REST端点的put调用的问题 资源中有以下方法:Java 在1个步骤中验证请求正文和请求参数?,java,spring-boot,javax.validation,Java,Spring Boot,Javax.validation,使用spring boot和javax.validation(不是spring验证)验证对REST端点的put调用的问题 资源中有以下方法: @PutMapping(...) public Response getResult(@RequestBody @Valid myBody, @PathVariable @MyIdValidation long id) { } 当我调用该方法时,myBody得到验证,我在异常处理程序中得到一个MethodArgumentNotValidExceptio
@PutMapping(...)
public Response getResult(@RequestBody @Valid myBody, @PathVariable @MyIdValidation long id) {
}
当我调用该方法时,myBody
得到验证,我在异常处理程序中得到一个MethodArgumentNotValidException
。但是参数id
未得到验证
只有当myBody
有效时,id
也会得到验证
我找到的唯一解决方案是不使用@Valid
,而是自己实现主体的验证
有更好的解决方案吗
短暂性脑缺血发作
Kibu我认为Spring MVC框架本身不可行,因为框架通过使用不同的组件以不同的方式处理
@RequestBody
和其他类似@RequestParam
或@PathVariable
。此外,这两个部分都需要断开连接,因为您可能不想验证方法的所有参数
@RequestBody
由org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor处理,并从那里调用验证&对于参数或路径变量,验证由org.springframework.validation.beanvalidation.MethodValidationInterceptor
完成
所以在我看来,控制器方法的方法参数是由框架逐个处理的&在逻辑上是断开的,所以这些验证不能组合在一起 我在这个问题上做了一些努力,并在
一站式验证是可能的,但您需要一种不同的方法。检查项目并测试它
Kibu是否有@MyIdValidation
的具体例子?你也在myBody
上使用JSR注释吗?我想你是对的。因为当我对正文使用自定义验证注释而不是@Valid时,所有内容都在一步中验证,我会得到一个ValidationConstraintException。@kibuKuhn:如果你来自德国,那么我需要你帮个忙。请分享一些方式,如电子邮件或skype等,我可以达到你。是关于我在那里的搬迁。如果愿意提供一些信息或帮助,请与我们分享。