我尝试理解 Spring MVC 文档中的以下部分(验证页面):验证可以应用于以下两个级别之一:1. @ModelAttribute、@RequestBody 和 @RequestPart 参数
我尝试理解 Spring MVC 文档中的以下部分(验证页面):
验证可以应用于以下两个级别之一:
1. 如果方法参数使用 Jakarta @Valid 或 Spring 的 @Validated 注释,并且紧随其后没有 Errors 或 BindingResult 参数,并且不需要方法验证(接下来将讨论),则 @ModelAttribute、@RequestBody 和 @RequestPart 参数解析器将单独验证方法参数。在这种情况下引发的异常是 MethodArgumentNotValidException。
- 当 @Constraint 注释(例如 @Min、@NotBlank 等)直接在方法参数或方法(用于返回值)上声明时,必须应用方法验证,并且该方法将取代方法参数级别的验证,因为方法验证涵盖方法参数约束和通过 @Valid 进行的嵌套约束。在这种情况下引发的异常是 HandlerMethodValidationException。
好的,从第一段我知道例如:
@PostMapping("/person")
public String createPerson(@Validated @ModelAttribute Person person) {
// Handle the logic for creating the person
// For example, save the person to a database (this part is omitted for simplicity)
return "success";
}
此方法将使用 Person 类内的 @Constraints 验证接收到的 Person 对象,例如:
public class Person {
@NotNull
@Size(max=64)
@Size(min=2)
private String name;
@Min(0)
private int age;
...
如果验证失败,它会抛出一个 MethodArgumentNotValidException
.
此外,这:
@PostMapping("/person")
public String createPerson(@Validated @ModelAttribute Person person, BindingResult result) {
if (result.hasErrors()) {
// handle error
return "personForm";
}
// Handle the logic for creating the person
return "success";
}
不会抛出异常,但是会让我在方法中处理错误。
我不明白的是第二段的意思 - .. 并且取代了方法参数级别的验证 .. 。这在技术上意味着什么?如果应用了方法验证,上述示例中会发生什么?Person 对象不会被验证吗?