我尝试使用@Valid注释,但是eclipse总是给出"有效无法解析为类型"错误.我正在使用spring3库.
我已将hibernate-validator-4.1.0.Final.jar导入到我的WEB-INF/lib目录中.但是,这并没有解决问题.
任何帮助表示赞赏!
使用hibernate-validator-4.2.0.Final.jar和ClassValidator类无处可寻.该版本的官方PDF 3.1.0.GA显示它存在于org.hibernate.validator包内,但在我的罐子和官方仓库里面它不存在.
这让我相信:
如果它已被弃用,那么使用注释和检查某些内容是否有效的最佳方法是什么?如果它已被弃用,那么这样做的" 旧 "方式是使用:
ClassValidator<SomeBeanClass> validator = new ClassValidator<SomeBeanClass>();
SomeBeanClass bean = new SomeBeanClass();
// use bean
InvalidValues[] badVals = validator.getInvalidValues(bean);
Run Code Online (Sandbox Code Playgroud)
如果它被移动了,那么它在哪里?!?!提前致谢!
假设我在这样的字段上进行验证:
@NotEmpty
@Digits(integer = 3, fraction = 0)
private String code;
Run Code Online (Sandbox Code Playgroud)
目前,如果我将表单字段留空,我会使用Spring MVC和Hibernate验证.有没有办法只显示@NotEmpty消息?
我正在尝试将表单验证添加到工作应用程序.我首先在登录表单中添加了一个NotNull检查.我正在使用Bean Validation api的Hibernate impl.
这是我写的代码
@Controller
@RequestMapping(value="/login")
@Scope("request")
public class LoginController {
@Autowired
private CommonService commonService;
@Autowired
private SiteUser siteUser;
@InitBinder
private void dateBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
CustomDateEditor editor = new CustomDateEditor(dateFormat, true);
binder.registerCustomEditor(Date.class, editor);
}
@ModelAttribute
protected ModelMap setupForm(ModelMap modelMap) {
modelMap.addAttribute("siteUser", siteUser);
return modelMap;
}
@RequestMapping(value="/form", method = RequestMethod.GET)
public ModelAndView form(ModelMap map){
if (siteUser.getId() == null){
map.addAttribute("command",new SiteUser());
return new ModelAndView("login-form",map);
}else {
return new ModelAndView("redirect:/my-dashboard/"+siteUser.getId());
}
}
@RequestMapping(value="/submit", method=RequestMethod.POST)
public ModelAndView submit(@Valid …Run Code Online (Sandbox Code Playgroud) 我有一个要验证的注释(比如电话注释)。我可以使用@phone 验证器来检查电话对象是否有效。我还希望能够将此验证器放在包含电话的联系信息对象上。有没有办法对一个注释使用多个验证器,以便我可以将 @phone 用于我的电话对象和我的联系信息对象?
喜欢
@Constraint(validatedBy = {PhoneIsValid.class, PhoneIsValid2.class})
工作吗?(想法是一个验证器处理电话对象,另一个处理联系信息对象。)
我正在使用hibernate验证器在实体上使用注释从Spring MVC进行验证.
我的实体中有一个BigDecimal属性,我需要检查范围值验证.如下
@NotNull(message = "errors.range_1_5_Trades.mandatory")
@Pattern(regexp = "(^$[0-9])", message = "errors.only.numbersAllowed")
@Range(min = 1, max = 5, message = "errors.invalid.range")
@Column(name = "FEE_LESS_THAN_5")
private BigDecimal feeLessThan_5;
Run Code Online (Sandbox Code Playgroud)
但是当我在Spring Controller中使用@Valid注释验证它时,它会抛出异常,如下所示
javax.validation.UnexpectedTypeException: No validator could be found for type: java.math.BigDecimal
at org.hibernate.validator.engine.ConstraintTree.verifyResolveWasUnique(ConstraintTree.java:383)
at org.hibernate.validator.engine.ConstraintTree.findMatchingValidatorClass(ConstraintTree.java:364)
at org.hibernate.validator.engine.ConstraintTree.getInitializedValidator(ConstraintTree.java:313)
at org.hibernate.validator.engine.ConstraintTree.validateConstraints(ConstraintTree.java:144)
at org.hibernate.validator.engine.ConstraintTree.validateConstraints(ConstraintTree.java:117)
at org.hibernate.validator.metadata.MetaConstraint.validateConstraint(MetaConstraint.java:84)
at org.hibernate.validator.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:452)
at org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:397)
at org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:361)
at org.hibernate.validator.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:313)
at org.hibernate.validator.engine.ValidatorImpl.validate(ValidatorImpl.java:139)
at org.springframework.validation.beanvalidation.SpringValidatorAdapter.validate(SpringValidatorAdapter.java:86)
at org.springframework.validation.DataBinder.validate(DataBinder.java:711)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doBind(HandlerMethodInvoker.java:807)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:359)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:171)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669) …Run Code Online (Sandbox Code Playgroud) 测试配置类
@Configuration
@Import( value = GlobalCoreContext.class)
public class TestConfiguration {
@Bean
public Validator createValidatorFactory() {
return Validation.buildDefaultValidatorFactory().getValidator();
}
}
Run Code Online (Sandbox Code Playgroud)
ValidatorClass
public final class LoginAttemptsExceededValidatorLoginId implements ConstraintValidator<LoginAttemptsExceeded, String> {
@Resource
private LoginDao loginDao;
private LoginAttemptsExceeded loginAttemptsExceeded;
@Override
public void initialize(final LoginAttemptsExceeded loginAttemptsExceeded) {
this.loginAttemptsExceeded = loginAttemptsExceeded;
}
/**
* Validation fails if the login attempts have exceeded the preset number.
* @param loginId
* @param constraintValidatorContext
* @return
*/
@Override
public boolean isValid(final String loginId, final ConstraintValidatorContext constraintValidatorContext) {
if(StringUtility.IsEmpty(loginId)) return …Run Code Online (Sandbox Code Playgroud) 我正在考虑使用布尔逻辑与我的bean验证使用Hibernate验证器在AND约束不足的情况下.我发现可以通过使用文档中描述的@ConstraintComposition注释创建新注释来更改此默认行为.该文档提供了以下示例.
@ConstraintComposition(OR)
@Pattern(regexp = "[a-z]")
@Size(min = 2, max = 3)
@ReportAsSingleViolation
@Target({ METHOD, FIELD })
@Retention(RUNTIME)
@Constraint(validatedBy = { })
public @interface PatternOrSize {
String message() default "{org.hibernate.validator.referenceguide.chapter11." +
"booleancomposition.PatternOrSize.message}";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
Run Code Online (Sandbox Code Playgroud)
使用这种@PatternOrSize验证约束意味着输入字符串或者小写或具有2和3之间的尺寸现在,这引发了几个问题:
AND和OR同时?我找不到任何暗示这是可能的东西,但也许我错过了一些东西.@Pattern和@Size约束动态化?因为否则我想我必须为我需要的每个参数组合定义一个新的注释.仅仅为了更改参数而定义一个新的注释@Size似乎不可行,但可能是必要的?先感谢您.
我有我的自定义validator,我想为它添加一些错误消息.所以我有下一个代码:
@Override
public boolean isValid(final String label,
final ConstraintValidatorContext constraintValidatorContext) {
constraintValidatorContext.disableDefaultConstraintViolation();
if(label.length() > MAX_LENGTH) {
constraintValidatorContext
.buildConstraintViolationWithTemplate("{error.maxLength}")
.addConstraintViolation();
return false;
}
...
}
Run Code Online (Sandbox Code Playgroud)
我的消息看起来像error.maxLength=You have exceeded max length of {0},所以它有参数maxLength.
在构建约束违规时可以添加它吗?
是否有任何标准的bean验证批注来检查Java集合中的重复项。或任何人都实现了自定义验证,以使用bean验证来检查列表中的重复项。
例如
public class MySecurityRequest{
private Date dob;
@DuplicateNotAllowed
private List securityQuestions;
}
public class SecurityQuestion{
private String question;
private String answer;
}
Run Code Online (Sandbox Code Playgroud)
在这里,我需要确保列表中的问题不再重复。是否有人面对过类似的问题?
java ×5
spring-mvc ×4
spring ×3
validation ×3
annotations ×1
hibernate ×1
javax ×1
testng ×1
tomcat7 ×1