java - 在 Hibernate Validator 中为每个属性生成一个错误代码

标签 java validation hibernate-validator

我正在考虑使用 Hibernate Validator 来满足我的要求。我想验证一个 JavaBean,其中属性可能有多个验证检查。例如:

class MyValidationBean
{
   @NotNull
   @Length( min = 5, max = 10 )
   private String myProperty;
}

但是,如果此属性验证失败,我希望将特定的错误代码与 ConstraintViolation 相关联,无论它是否因 @Required 或 @Length 而失败,尽管我想保留错误消息。

class MyValidationBean
{
   @NotNull
   @Length( min = 5, max = 10 )
   @ErrorCode( "1234" )
   private String myProperty;
}

类似上面的东西会很好,但它的结构不必完全像那样。我看不到使用 Hibernate Validator 执行此操作的方法。可能吗?

最佳答案

您可以创建一个自定义注释来获取您正在寻找的行为,然后在验证和使用反射时您可以提取注释的值。类似于以下内容:

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ErrorCode {
    String value();
}

在你的bean中:

@NotNull
@Length( min = 5, max = 10 )
@ErrorCode("1234")
public String myProperty;

关于验证你的 bean:

Set<ConstraintViolation<MyValidationBean>> constraintViolations = validator.validate(myValidationBean);    
for (ConstraintViolation<MyValidationBean>cv: constraintViolations) {
    ErrorCode errorCode = cv.getRootBeanClass().getField(cv.getPropertyPath().toString()).getAnnotation(ErrorCode.class);
    System.out.println("ErrorCode:" + errorCode.value());
}

话虽如此,我可能会质疑要求为这些类型的消息提供错误代码的要求。

关于java - 在 Hibernate Validator 中为每个属性生成一个错误代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2663949/

相关文章:

java - 如何按GMT时区获取货币名称?

java - SQL 到对象,多对多带字段

javascript - 使用 jquery 验证表单中的名称

java - 使用 Weld 和 Hibernate Validator 进行方法验证

java - 在使用带有自定义消息源的 hibernate validator 时如何转义参数

java - 如何识别 JanusGraph 的名称?

java - 有没有办法为同一平台上的多个目标构建 java 应用程序的安装程序?

php - 我可以在 Laravel 5.1 中通过自定义请求对象验证后恢复输入字段值吗?

asp.net-mvc - MVC 4 本地化数据库中的验证消息

spring - 使用 Spring 3.2.0 验证