繁体   English   中英

Java ee bean验证

[英]java ee bean validation

我正在尝试在Java ee 7上实现用户授权。对于输入的验证数据,我使用Bean validation批注。

    @NotNull(message = "Please enter email address")
    @Column(name = "email")
    private String email;

    @NotNull(message = "Please enter password")
    @Size(min = 6, max = 255)
    @Column(name = "password")
    private String password;

我也有@PrePersist方法,该哈希输入密码

    @PrePersist
    public void updatePassword(String password) {
        //some code
    }

这是我注册用户的方法:

@EJB
private UserService userService;

public void register() {
        if (userService.getByEmail(email) == null) {
            try {
                userService.register(email, password);

                //log in if users is created
                authController.setEmail(email);
                authController.setPassword(password);
                authController.login();
            } catch (Exception e) {
                setErrorMessage("Validation error");
            }
        } else {
            setErrorMessage("Please choose another email address");
        }
    }

UserService

@Stateless
public class UserService {

    @EJB
    private UserDAO userDAO;

    public void register(String email, String password){
        User user = new User();
        user.setEmail(email);
        user.setPassword(password);
        userDAO.create(user);
    }
}

问题是密码是否为空。 首先调用了updatePassword方法,但没有在password field @NotNull批注,因此我得到了NullPointerException. 首先如何进行验证,然后再检查其他方法。 提前致谢!

似乎尚未足够快地触发bean验证。

解决此问题的一种方法是将ValidatorFactory注入UserService,然后在创建用户对象后对其进行验证。 像这样:

@Stateless 
public class UserService {    

    @EJB
    private UserDAO userDAO;

    @Inject
    private ValidatorFactory validatorFactory;

    public void register(String email, String password){
        User user = new User();
        user.setEmail(email);
        user.setPassword(password);

        Set<ConstraintViolation<User>> constraintViolations = validatorFactory.getValidator().validate(user);
        if(constraintViolations.size() > 0){
            // handle error
        }else{
            userDAO.create(user);
        }
    }
}

这个答案可能有助于澄清

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM