Tag: hibernate validator

如何使用.properties文件或数据库中的正则表达式指定Hibernate“@Pattern”注释

情况 :我想基于用户属性执行Hibernatevalidation(根据用户的帐户数据允许输入的不同validation规则) – 我认为必须可以使用.properties文件来指定特定的正则表达式,但是我无法弄清楚出了什么问题: 我当前指定validation正则表达式的方法从特定接口文件中的常量中拉出该正则表达式(将所有内容保持在一起)并将其作为常量插入到每个变量的@Pattern()注释中 – 例如,对于变量workPhone : @Column(name = “WORK_PHONE”) @NotEmpty(message = “{ContactInfo.workPhone.notEmpty}”) @Pattern(regexp = PHONE_NUMBER_PATTERN_SL, message = “{ContactInfo.workPhone.regexp.msg}”) @Size(max = 10, message = “{ContactInfo.workPhone.size}”) protected String workPhone; …正则表达式存储在static final String PHONE_NUMBER_PATTERN_SL ,所有{ContactInfo.workPhone…}调用都来自.properties文件: ContactInfo.workPhone.notEmpty=Please enter your phone number. ContactInfo.workPhone.regexp.msg=Invalid characters entered in phone. Use this format XXX-XXX-XXXX. ContactInfo.workPhone.size=Phone can not be longer than 10 […]

Beanvalidation组序列不起作用

我正在使用spring 4.1,hibernatevalidation器5.1.3进行我的项目。 我一直试图让GroupSequence从最近2天开始工作。 我已经提到了validation文档,博客和stackoverflow上发布的一些问题。 请看下面的课程。 当我从注释中删除GroupSequence和groups时,所有validation消息都会出现在一起,即对名称和其他字段的所有检查都会一起触发。 让我们说名字字段 – 我想首先validation@NotBlank和@Size,然后名称应该与模式匹配,最后由于数据库调用应该检查@UniqueName。 为此,我按照文档和答案中的建议创建了GroupSequence。 但是当触发validation时,只会为名称触发@NotBlank和@Size。 当我从剩余的注释中删除组值时,它们开始工作但是所有错误消息都会立即显示,这是我不想要的。 我希望使用组指定的注释First.class在Second.classvalidation之前一起触发。 我不明白为什么用group指定的validation没有被解雇。 有人可以指导我。 @GroupSequence({MyForm.class, OrderedChecks.class}) public class MyForm { @NotBlank @Size(min = 2, max = 40) @Pattern(regexp = “^[\\p{Alnum} ]+$”, groups = First.class) @UniqueName(groups = Second.class)//Custom validation private String name; @NotBlank @Size(min = 2, max = 40) private String url; @NotBlank @Size(max = […]

在Spring MVC中使用无效数据提交表单时发送的语法错误请求(使用hibernate Validator)

登录表格: Login Username Password Login ${message} loginData类: package com.demo.forms; import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.NotEmpty; public class loginData { @Length(min=4) private String uname; @NotEmpty private String pwd; public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = […]

在@Constraint中清空validatedBy

我注意到所有内置约束对@Constraint的validatedBy参数都有一个空值。 即@Constraint(validatedBy = {}) 首先,为什么允许他们为validatedBy设置一个空值? 我认为你可以将它留空仅用于不需要附加validation的约束组合? 另外,请注意Hibernate Validator仍然可以为每个内置约束找到一个validation器实现类,尽管validatedBy是空的,但是如果我将validatedBy留给我的约束,我的自定义validation器永远不会被拾取。 这是为什么? 谢谢。

Hibernate Validator – @Length – 如何为min和max指定单独的消息?

我在我的网络应用程序中使用Hibernatevalidation器进行表单validation。 我在我的String属性中使用@Length注释,如下所示: @Length(min = 5, message = “The field must be at least 5 characters”) private String myString; 但是,如果String超过50个字符,我需要显示不同的消息。 有没有办法使用开箱即用的@Lengthvalidation器来做到这一点? 我想做的一个例子(编译器不会让我)如下: @Length(min = 5, message = “The field must be at least 5 characters”) @Length(max = 50, message = “The field must be less than 50 characters”) private String myString; 我试过@Max和@Min,他们没有做我想做的事。 任何投入将不胜感激!

Spring MVC + Hibernate:数据validation策略

我们都知道,Spring MVC通常与Hibernate Validator和JSR-303很好地集成。 但正如有人所说,Hibernate Validator只适用于Bean Validation,这意味着应该将更复杂的validation推送到数据层。 此类validation的示例:业务密钥唯一性,内部记录依赖性(通常指向数据库设计问题,但我们都生活在一个不完美的世界)。 即使像字符串字段长度这样的简单validation也可能由某个DB值驱动,这使得Hibernate Validator无法使用。 所以我的问题是,Spring或Hibernate或JSR是否提供了执行此类复杂validation的function? 是否有一些已建立的模式或技术部分可以在基于Spring和Hibernate的标准Controller-Service-Repository设置中执行此类validation? 更新:让我更具体一点。 例如,有一个表单可以向控制器的save方法发送AJAX保存请求。 如果发生一些validation错误 – 简单或“复杂” – 我们应该回到浏览器,其中一些json指示有问题的字段和相关错误。 对于简单错误,我可以从BindingResult提取字段(如果有)和错误消息。 您会针对“复杂”错误提出什么样的基础设施(可能是特定的,而不是临时的例外?)? 使用exception处理程序对我来说似乎不是一个好主意,因为在save方法和@ExceptionHandler之间分离单个validation过程会使事情变得复杂。 目前我使用一些临时exception(如ValidationException ): public @ResponseBody Result save(@Valid Entity entity, BindingResult errors) { Result r = new Result(); if (errors.hasErrors()) { r.setStatus(Result.VALIDATION_ERROR); // … } else { try { dao.save(entity); r.setStatus(Result.SUCCESS); } except (ValidationException e) { […]

hibernate唯一密钥validation

我有一个字段,比如user_name ,它在表中应该是唯一的。 使用Spring / Hibernatevalidationvalidation它的最佳方法是什么?

如何访问注释属性中描述的字段

是否可以访问字段值,其中字段名称在注释中描述,该注释注释了类中的另一个字段。 例如: @Entity public class User { @NotBlank private String password; @Match(field = “password”) private String passwordConfirmation; } 注解: @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = FieldMatchValidator.class) @Documented public @interface Match { String message() default “{}”; Class[] groups() default {}; Class[] payload() default {}; String field(); } 现在,是否可以从ConstraintValidator实现类中的类User访问字段密码? 编辑: 我写了这样的话: public class MatchValidator implements ConstraintValidator { private String […]

使用Spring MVC的Hibernate-validator组

我正在使用hibernate-validator 4.3.1和Spring MVC 3.2.3。 我的应用程序有一个带有以下属性和注释的bean(为了简单起见,我删除了大部分内容): public class Account { @NotEmpty(groups = GroupOne.class) private String name; @NotEmpty(groups = GroupOne.class) private Date creationDate; @NotEmpty(groups = GroupTwo.class) private String role; @NotEmpty(groups = GroupTwo.class) private String profile; //getters and setters } 如图所示,有两组validation,因为应用程序有一个向导forms,由两个步骤组成:第一步,name和creationDate字段由用户填充,第二步是角色和配置文件字段。 我添加一些Controller方法作为示例: @RequestMapping(value = “/account/stepOne”, method = “POST”) public String stepOne(@ModelAttribute @Validated(GroupOne.class) Account account, BindingResult bindingResult) { //Implementation […]

Hibernate Validator方法或构造函数validation

如何使用Hibernatevalidation器validation构造函数或方法中的参数? 我希望validation在ValueObject创建之前发生,这样我就可以抛出exception而不创建对象,除非所有参数都有效。 基本上我正在尝试使用注释,而不是像这样做,如果可能的话: public class ConditionalPerson { private String name; private String surname; private int age; public ConditionalPerson(String name, String surname, int age){ if (name == null || surname == null || age < 1) { throw new IllegalArgumentException(); } this.name = name; this.surname = surname; this.age = age; } } 我已经尝试过像这样的文档似乎可以工作,但仍然会导致创建对象。 public class Person […]