jor*_*gen 8 java validation spring annotations spring-mvc
在我的Spring 3 MVC应用程序中,用户需要保存密码,如果他们也能够在保存时确认密码,那将是一个很好的功能.
在bean我使用基于注释的验证.是否有可用于执行此检查的注释验证器?
经过一些谷歌搜索后,我找到了这个博客:http://gochev.blogspot.com/2010/06/spring-mvc-spring-bean-validation.html.但我想我在这里缺少一个jar-lib,因为Eclipse无法找到/建议任何罐子.有人知道我需要什么罐子来工作吗?
提前致谢 :)
我写了以下内容以验证密码:
约束实施:
package com.test.web.validation.user;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = PasswordsEqualConstraintValidator.class)
public @interface PasswordsEqualConstraint {
String message();
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
package com.test.web.validation.user;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import com.test.logic.dto.UserDto;
public class PasswordsEqualConstraintValidator implements
ConstraintValidator<PasswordsEqualConstraint, Object> {
@Override
public void initialize(PasswordsEqualConstraint arg0) {
}
@Override
public boolean isValid(Object candidate, ConstraintValidatorContext arg1) {
UserDto user = (UserDto) candidate;
return user.getPassword().equals(user.getPasswordRepeat());
}
}
Run Code Online (Sandbox Code Playgroud)
我的DTO对象:
package com.test.logic.dto;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import com.esldic.web.validation.user.EmailExistsConstraint;
import com.esldic.web.validation.user.PasswordsEqualConstraint;
@PasswordsEqualConstraint(message = "passwords are not equal")
public final class UserDto extends AbstractDto implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
@NotNull
@Size(min = 3, max = 30)
@EmailExistsConstraint(message = "email is not available")
private String email;
private String username;
@NotNull
@Size(min = 2, max = 30)
private String password;
@NotNull
@Size(min = 2, max = 30)
private String passwordRepeat;
...
}
Run Code Online (Sandbox Code Playgroud)
最后,我的控制器
package com.test.web.controllers;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import com.test.logic.dto.UserDto;
@Controller
public final class SignupController {
@Autowired
private Validator validator;
@RequestMapping(value = "/signup.html", method = RequestMethod.POST)
public @ResponseBody
ModelAndView handleSignupForm(@ModelAttribute UserDto candidate,
HttpServletResponse response) throws ServiceException {
Set<ConstraintViolation<UserDto>> failures = validator
.validate(candidate);
if (!failures.isEmpty()) {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
return ValidationHelper.validationMessages(failures);
} else {
return userService.create(candidate);
}
}
Run Code Online (Sandbox Code Playgroud)
此外,在谷歌,你会发现很多样本与JSR-303 bean验证.
您需要 Hibernate Validation 和 JSR 303 Api jar。
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.1.0.Final</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.0.0.GA</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
请参阅此问题:Cross fieldvalidation with Hibernate Validator (JSR 303)
有几种方法可以解决这个问题。
| 归档时间: |
|
| 查看次数: |
18750 次 |
| 最近记录: |