有没有一种方法可以使用 spring 验证请求参数,而无需在每个函数中检查它?例如,控制器中的每个方法都会生成元素列表,并且每个方法接受“from”和“to”参数,因此验证是:
from >=0 && to > 0 && from < to
我想配置 spring 返回BAD_REQUEST或其他一些状态,就像它无法将 string 转换为 int 参数时一样。
谢谢。
在我的Spring应用程序中,我Hibernate Validator用于验证目的.
当我做简单的验证时@NotEmpty,@Email...我很容易工作
但是当来到Date字段时,给出问题......
问题是在我的Jsp页面中我得到的值类型为String然后我将String转换为Date ..
听到是我的榜样......
@NotEmpty(message = "Write Some Description")
private String description;
private String fromDateMonth;
private String fromDateYear;
private String toDateMonth;
private String toDateYear;
Run Code Online (Sandbox Code Playgroud)
我正在转换这fromDateMonth和fromDateYear成这是我的控制器类Date.
那么他们在Controller类中添加Validator Annotation的任何可能性是什么?
其他明智的我应该听到什么?给我建议......
我正在尝试使用JSR-303验证在spring中为带注释的bean添加单元测试.
这个bean很简单:
public class Bean {
@Size(max=XX)
String text;
}
Run Code Online (Sandbox Code Playgroud)
在Spring配置中,我有所有必需的JAR文件:
validation-api
hibernate-validator
Run Code Online (Sandbox Code Playgroud)
验证器初始化为:
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
Run Code Online (Sandbox Code Playgroud)
我在测试用例中的尝试看起来像这样(弹簧和其他绒毛被移除):
@Autowired
private LocalValidatorFactoryBean factory;
@Test
public void testTemplateFormBeanValidation() {
// TODO exception at the moment. Can not resolve the validator. Provider issue.
factory.setProviderClass(HibernateValidator.class);
factory.setTraversableResolver(new DefaultTraversableResolver());
Validator val = factory.getValidator();
TemplateFormBean fb1 = new TemplateFormBean();
fb1.setText("this text works");
Set<ConstraintViolation<TemplateFormBean>> constraints = val.validate(fb1);
assertNull(constraints);
}
Run Code Online (Sandbox Code Playgroud)
当我运行此测试时,我得到以下堆栈跟踪:
java.lang.AbstractMethodError: javax/persistence/spi/PersistenceProvider.getProviderUtil()Ljavax/persistence/spi/ProviderUtil;
at javax.persistence.Persistence$1.isLoaded(Persistence.java:78)
at org.hibernate.validator.engine.resolver.JPATraversableResolver.isReachable(JPATraversableResolver.java:62)
at org.hibernate.validator.engine.resolver.DefaultTraversableResolver.isReachable(DefaultTraversableResolver.java:94)
at org.hibernate.validator.engine.resolver.SingleThreadCachedTraversableResolver.isReachable(SingleThreadCachedTraversableResolver.java:47)
at org.hibernate.validator.engine.ValidatorImpl.isValidationRequired(ValidatorImpl.java:757)
at org.hibernate.validator.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:324)
at org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForRedefinedDefaultGroup(ValidatorImpl.java:273)
at …Run Code Online (Sandbox Code Playgroud) 有可能吗?
我做了一个检查,如果2场是由等于自定义注解这里.
我想验证字段"password"是否等于另一个字段"confirmedPassword".现在,如果不是,我希望显示链接到confirmedPassword字段的错误消息.我在jsp中显示错误<form:errors path="" />.还有另一种方法吗?另外也可能有这个注释另外2场email和confirmedEmail.我怎么能区分哪个全局错误放在哪里......
我希望这一切都有道理..
对于我提交的所有表单,我正在创建文档以接收提交的信息
例如public static void formAction(@Valid FormDocument formDocument){...}
我喜欢这个,因为它让我的控制器看起来整洁,并且更容易看到表单中的请求.
我的注册文件看起来(修剪)像这样:
@Email
@Required
public String email;
@Required
public String password;
@Required
public String confirmPassword;
Run Code Online (Sandbox Code Playgroud)
我的问题是有没有办法可以检查密码是否与此类本身中的confirmPassword字段匹配.目前我正在检查控制器并在验证失败时将验证消息传回.我认为如果它是在文档内部完成的话会更整洁.
感谢您的任何反馈/答案提前!
我的应用程序在这里遇到了一些问题.我想检查字段密码和确认密码是否匹配在一起,所以我尝试在这个问题的第一个答案中这样做:使用Hibernate Validator进行交叉字段验证(JSR 303)
问题是它实际上不起作用,我没有想法为什么.请帮我!这是我在这里的第一篇文章,所以请不要对我太苛刻.
这是我的注释:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package pl.lodz.p.zsk.ssbd2012.ssbd12.ValidationConstraints;
import java.lang.annotation.*;
import javax.validation.Constraint;
import javax.validation.Payload;
/**
*
* @author lukasz
*/
@Documented
@Constraint(validatedBy = FieldMatchValidator.class)
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface FieldMatch {
String message() default "{pl.lodz.p.zsk.ssbd2012.ssbd12.ValidationConstraints.FieldMatch}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String first();
String second();
}
Run Code Online (Sandbox Code Playgroud)
这是我的ValidatorClass:
/*
* To change this template, choose Tools | Templates
* …Run Code Online (Sandbox Code Playgroud) validation hibernate-validator bean-validation jsf-2 managed-bean
java ×4
spring ×4
validation ×3
binding ×1
hibernate ×1
jsf-2 ×1
json ×1
managed-bean ×1
spring-mvc ×1