Spring 支持两种不同的验证方法:Spring 验证和 JSR-303 bean 验证。两者都可以通过定义一个委托(delegate)给其他委托(delegate)者(包括 bean validator )的 Spring validator 来使用。到目前为止一切顺利。
但是,当注释方法以实际请求验证时,就另当别论了。我可以这样注释
@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 .后者的文档说
Variant of JSR-303's Valid, supporting the specification of validation groups. Designed for convenient use with Spring's JSR-303 support but not JSR-303 specific.
这并没有多大帮助,因为它并不能准确地说明它有何不同。如果有的话。两者似乎对我来说都很好。
最佳答案
更直接的答案。 对于那些仍然不知道究竟是什么“验证组”的人。
用于@Valid
验证
Controller :
@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
Controller :
@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;
}
关于java - Spring中@Valid和@Validated的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36173332/