注意: 我阅读了搜索@valid vs @validated时收到的几乎所有堆栈帖子,但找不到答案,因此我将其发布。
我很困惑@Validated
在这里做什么。如果inputParms
无效,则抛出javax.validation.ConstraintViolationException
甚至不进入代码内部。但是,如果我将@Validated
替换为@Valid
,则不会引发异常,bindingResult.hasErrors()
会捕获它。
@RestController
@Validated // what is this doing ??
public class MyRestController{
@PostMapping(value="/my-data",produces= {MediaType.APPLICATION_JSON_UTF8_VALUE})
public ResponseEntity<?> doSomething(@Valid @RequestBody MyInputParam inputParms,BindingResult bindingResult){
if(bindingResult.hasErrors()) {
//do something here
}
}
}
因此,如果我使用@Validated
,BindingResult
根本没有用吗?
甚至只是@Validated
与@Valid
答案 0 :(得分:0)
请参见Difference between @Valid and @Validated in Spring。
在您的特定情况下,问题是@Validated
与@Valid
混合在一起。解决此问题的选项:
@Validated
,并使用@Validated
或@Valid
作为参数@Valid
或@Validated
@RestController
public class MyRestController {
@PostMapping(value = "/my-data", produces = {MediaType.APPLICATION_JSON_UTF8_VALUE})
public ResponseEntity<?> doSomething(@Validated @RequestBody MyInputParam inputParms,
BindingResult bindingResult) {
if(bindingResult.hasErrors()) {
//do something here
}
}
}