[英]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.