设置自定义字段名称和代码

时间:2015-08-25 19:26:40

标签: java spring java-ee bean-validation spring-validator

我正在尝试使用Bean Validation在我的Spring App中进行验证。我在我的bean中定义了以下字段 -

@NotNull(message = "CUSTOMERROR-1000")
private String firstName;

这里我在我的属性文件中将CUSTOMERROR-1000定义为“字段是必填字段”。在我的ControllerAdvice类中,我可以使用以下代码检索详细信息:

getBindingResult().getFieldError().getField()
getBindingResult().getFieldError().getCode()
getBindingResult().getFieldError().getDefaultMessage()

这里我将字段名称作为firstName。有没有办法注释该字段并将值设置为“名字”?同样有没有办法通过注释设置代码值?

2 个答案:

答案 0 :(得分:1)

为此,您需要创建自己的约束。您可以添加其他属性,标签,errorCode等,为它们设置值并使用它们。请参阅:http://docs.jboss.org/hibernate/validator/5.0/reference/en-US/html/validator-customconstraints.html#validator-customconstraints-compound

您可以像这样定义错误消息: Error code: {errorCode} - {label} is mandatory

答案 1 :(得分:1)

最简单的方法(IMO)似乎仍然可以为一个微不足道的(IMO)带来许多好处。 getFieldError的结果由Validator提供。知道这一点,您可以为DataBinder提供自定义验证器。您的验证器可能如下所示:

  1. 首先定义自定义验证器

    public class FirstNameValidator implements Validator{
    
         public boolean supports(Class clazz) {
             return YourClass.class.equals(clazz);
         }
    
         public void validate(Object obj, Errors e) {
             if(obj != null){
                YourClass theObj = (YourClass)obj;
                   if(theObj.getFirstName() == null || theObj.getFirstName().trim()==""){
                      e.rejectValue("First Name","CUSTOMERROR-1000");
                   }
          }
    
       }
    

    }

  2. 之后你现在用上下文的数据仓注册你的自定义验证器(我假设你在这里运行Spring MVC):

    @InitBinder
    protected void initBinder(WebDataBinder binder) {
        binder.addValidators(new FirstNameValidator());
    }
    
  3. 这将确保您获得所需格式的名称。同样,对于一些花哨的文本来说,这是很多打字(基于注释的方法同样长,有更多的输入来支持注释)。