春季@Valid与@Validated的区别

2022-08-31 07:45:39

Spring支持两种不同的验证方法:Spring验证和JSR-303 Bean验证。两者都可以通过定义一个Spring验证器来使用,该验证器委托给其他委托器,包括bean验证器。目前为止,一切都好。

但是,当注释方法以实际请求验证时,这是另一回事。我可以这样注释

@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Valid @RequestBody TestObject obj, BindingResult result) {

或者像这样

@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Validated @RequestBody TestObject obj, BindingResult result) {

在这里,@Valid是javax.validation.Valid,@Validated是org.springframework.validation.annotation.Validated。后者的文档说

JSR-303 的 Valid 变体,支持验证组的规范。设计用于方便使用Spring的JSR-303支持,但不是特定于JSR-303的。

这并没有多大帮助,因为它没有确切地说明它是如何不同的。如果有的话。两者对我来说似乎都很好。


答案 1

一个更直接的答案。对于那些仍然不知道到底什么是“验证组”的人来说

用于@Valid验证

控制器:

@RequestMapping(value = "createAccount")
public String stepOne(@Valid Account account) {...}

表单对象:

public class Account {

    @NotBlank
    private String username;

    @Email
    @NotBlank
    private String email;

}

@Validated验证组
的用法 源: http://blog.codeleak.pl/2014/08/validation-groups-in-spring-mvc.html

控制器:

@RequestMapping(value = "stepOne")
public String stepOne(@Validated(Account.ValidationStepOne.class) Account account) {...}

@RequestMapping(value = "stepTwo")
public String stepTwo(@Validated(Account.ValidationStepTwo.class) Account account) {...}

表单对象:

public class Account {

    @NotBlank(groups = {ValidationStepOne.class})
    private String username;

    @Email(groups = {ValidationStepOne.class})
    @NotBlank(groups = {ValidationStepOne.class})
    private String email;

    @NotBlank(groups = {ValidationStepTwo.class})
    @StrongPassword(groups = {ValidationStepTwo.class})
    private String password;

    @NotBlank(groups = {ValidationStepTwo.class})
    private String confirmedPassword;

}

答案 2

正如您从文档中引用的那样,被添加以支持“验证组”,即验证Bean中的字段组。这可以用于多步骤表单,您可以在其中验证姓名,电子邮件等。在第一步中,然后在后续步骤中的其他字段。@Validated

之所以没有将其添加到注释中,是因为它使用java社区进程(JSR-303)进行了标准化,这需要时间,并且Spring开发人员希望允许人们更快地使用此功能。@Valid

转到此 jira 票证,看看注释是如何存在的。


推荐