代码之家  ›  专栏  ›  技术社区  ›  Art Spasky

为什么方法级验证在Spring中不起作用?

  •  -1
  • Art Spasky  · 技术社区  · 9 年前

    学生班级:

    package com.solvegen.education.student.enrollment.core.model;
    
    import com.sun.istack.internal.NotNull;
    
    import java.util.Date;
    
    public class Student {
        private Long id;
    
        @NotNull
        private String userName;
    
        @NotNull
        private String firstName;
    
        @NotNull
        private String lastName;
    
        @NotNull
        private String password;
    
        @NotNull
        private String emailAddress;
    
        @NotNull
        private Date dateOfBirth;
    
        public Date getDateOfBirth() {
            return dateOfBirth;
        }
    
        public String getEmailAddress() {
            return emailAddress;
        }
    
        public String getFirstName() {
            return firstName;
        }
    
        public Long getId() {
            return id;
        }
    
        public String getLastName() {
            return lastName;
        }
    
        public String getPassword() {
            return password;
        }
    
        public String getUserName() {
            return userName;
        }
    
        public void setDateOfBirth(Date dateOfBirth) {
            this.dateOfBirth = dateOfBirth;
        }
    
        public void setEmailAddress(String emailAddress) {
            this.emailAddress = emailAddress;
        }
    
        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public void setLastName(String lastName) {
            this.lastName = lastName;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
    
    }
    

    spring-config.xml的内容

    <bean id="validator"
          class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
    </bean>
    <bean id="validatorPostProcessor"
          class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor">
        <property name="validator" ref="validator"/>
    </bean>
    

    弹簧服务的定义:

    @Service("studentService")
    @Validated
    public class StudentService {
    
        @Autowired
        private StudentMapper studentMapper;
    
        @Transactional
        public void insertStudent(@Valid Student student) {
            studentMapper.insertStudent(student);
        }
    }
    

    pom.xml的内容

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>5.2.1.Final</version>
    </dependency>
    <dependency>
        <groupId>javax.el</groupId>
        <artifactId>javax.el-api</artifactId>
        <version>2.2.4</version>
    </dependency>
    
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.2.7</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.2.2</version>
    </dependency>
    

    当我使用 @NotNull 而不是 @Valid 在方法声明中,所有工作正常(当我传递null而不是Student类的实例时,Validation Framework抛出异常)。

    我做错了什么?或者String中的方法级验证不支持参数的@Valid注释?

    1 回复  |  直到 9 年前
        1
  •  0
  •   Art Spasky    9 年前

    问题出现在com.sun.istack.internal.NotNull中。我从不正确的包装中导入。必须为javax.validation.constraints.NotNull