java - Spring中@Valid和@Validated的区别

标签 java spring validation spring-mvc

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/

相关文章:

java - 带有 Spring Security 的 JSON REST API

java - 如何使用 SPRING REST 将 JSON 请求映射到字符串

java - 基本的 Java 继承/数组。如何将子类变量与数组一起使用

java - 渲染 xml 文档

java - build.xml javac 提示在编译期间缺少 javax.servlet.http 中的类

node.js - Express-Validator 检查子文档数组

css - 输入字段内的验证 Rails bootstrap simple_form

java - 我如何打印元音以及它们是什么?

Spring 5 + Tomcat standalone - 截断响应

php - 文件上传拒绝 GIF 动画(使用 PHP/Zend Framework)