小编F S*_*ail的帖子

JSR303自定义验证器被调用两次

我正在使用Spring MVC创建一个网站,并且我正在使用Spring Data JPA和Hibernate 4作为我的JPA提供程序.目前正在使用Hibernate Validator处理验证.我有一个问题,我的验证器被调用两次,我无法弄清楚为什么.这是一个问题的主要原因是因为第二轮,依赖关系没有自动连接到验证器,我得到一个空指针异常.以下是导致失败的呼叫序列:

  1. 提交注册表单,首先调用NotDefaultSectValidator并成功完成用户对象上的"whereDidYouHearAboutUs"字段.
  2. 接下来调用UniqueUsernameValidator并成功完成"用户名"字段验证.
  3. 控制器上的'addUserFromForm'方法启动,并在bindingResults对象中找不到任何错误.
  4. 然后在UserService类上调用'addUser'方法.此方法到达'userRepository.save(user);'行 但之后不要立即运行'print.ln'行.单步执行此行将返回到"NotDefaultSectValidator"断点.这是第二次完成,我重新输入第二个验证器'UniqueUsernameValidator'.这里我得到一个空指针异常,因为出于某种原因,Spring第二次无法在DAO中自动装配.

任何人都可以阐明验证器被调用两次的原因,特别是为什么要跨越'userRepository.save(user);' 回到这些验证器?

非常感谢

这是我的user.java类

package com.dating.domain;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

import org.hibernate.annotations.Type;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;
import org.joda.time.LocalDate;
import org.springframework.format.annotation.DateTimeFormat;

import com.dating.annotation.NotDefaultSelect;
import com.dating.annotation.UniqueUsername;

@Entity
@Table(name = "dating.user")
public class User {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy …
Run Code Online (Sandbox Code Playgroud)

java validation spring jpa bean-validation

10
推荐指数
2
解决办法
3755
查看次数

标签 统计

bean-validation ×1

java ×1

jpa ×1

spring ×1

validation ×1