Ser*_*nov 80 java validation spring spring-mvc
Spring支持两种不同的验证方法:Spring验证和JSR-303 bean验证.两者都可以通过定义一个Spring验证器来使用,该验证器委托给其他委托者,包括bean验证器.到现在为止还挺好.
但是当注释实际请求验证的方法时,这是另一个故事.我可以像这样注释
@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Valid @RequestBody TestObject obj, BindingResult result) {
Run Code Online (Sandbox Code Playgroud)
或者像这样
@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Validated @RequestBody TestObject obj, BindingResult result) {
Run Code Online (Sandbox Code Playgroud)
这里,@ Valid是javax.validation.Valid,而@Validated是org.springframework.validation.annotation.Validated.后者的文档说
JSR-303的变体有效,支持验证组的规范.设计方便使用Spring的JSR-303支持,但不支持JSR-303特定.
这没有多大帮助,因为它没有确切地说明它是如何不同的.如果有的话.两者似乎都对我很好.
zhu*_*per 63
一个更直接的答案.对于那些仍然不知道究竟是什么的"验证组".
@Valid验证用法
控制器:
@RequestMapping(value = "createAccount")
public String stepOne(@Valid Account account) {...}
Run Code Online (Sandbox Code Playgroud)
表单对象:
public class Account {
@NotBlank
private String username;
@Email
@NotBlank
private String email;
}
Run Code Online (Sandbox Code Playgroud)
@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) {...}
Run Code Online (Sandbox Code Playgroud)
表单对象:
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;
}
Run Code Online (Sandbox Code Playgroud)
Mur*_*dız 11
只是为了简化:
@Validated注解是类级别的注解,我们可以使用它来验证Spring传递到被注解类的方法中的参数。
和
@Valid方法参数和字段上的注释告诉Spring我们想要验证方法参数或字段。
Leb*_*cca 10
在问题的示例代码片段中,@Valid并@Validated没有什么区别。但是如果@RequestBody用List对象注释,或者是用 注释的字符串值@RequestParam,则验证不会生效。
我们可以使用@Validated的方法级验证功能使其工作。要做到这一点,关键是@Validated放在班级上。这可能是spring 框架之间@Valid和@Validated中的另一个重要区别。
参考
| 归档时间: |
|
| 查看次数: |
57526 次 |
| 最近记录: |