设置自定义字段名称和代码
Setting Custom Field Name and Code
我正在尝试在我的 Spring 应用程序中使用 Bean Validation 进行验证。我的 bean 中定义了以下字段 -
@NotNull(message = "CUSTOMERROR-1000")
private String firstName;
这里我在 属性 文件中将 CUSTOMERROR-1000 定义为 "Field is mandatory"。在我的 ControllerAdvice class 中,我可以使用以下代码检索详细信息:
getBindingResult().getFieldError().getField()
getBindingResult().getFieldError().getCode()
getBindingResult().getFieldError().getDefaultMessage()
这里我得到的字段名是firstName。有没有办法注释该字段并将值设置为"First Name"?同样有没有办法通过注解设置代码值?
为此,您需要创建自己的约束。您可以添加其他属性、标签、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
最简单的方法 (IMO) 似乎仍然需要大量工作才能获得微不足道的 (IMO) 好处。 getFieldError
的结果由 Validator
提供。知道这一点后,您可以为 DataBinder
提供自定义验证器。您的验证器可能如下所示:
首先定义你的自定义验证器
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");
}
}
}
}
之后,您现在使用上下文的数据绑定器注册您的自定义验证器(我假设您是 运行 Spring MVC):
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.addValidators(new FirstNameValidator());
}
这将确保您获得所需格式的名称。同样,对于一些花哨的文本,它需要大量的输入(基于注释的方法同样长,需要更多的输入来支持注释)。
我正在尝试在我的 Spring 应用程序中使用 Bean Validation 进行验证。我的 bean 中定义了以下字段 -
@NotNull(message = "CUSTOMERROR-1000")
private String firstName;
这里我在 属性 文件中将 CUSTOMERROR-1000 定义为 "Field is mandatory"。在我的 ControllerAdvice class 中,我可以使用以下代码检索详细信息:
getBindingResult().getFieldError().getField()
getBindingResult().getFieldError().getCode()
getBindingResult().getFieldError().getDefaultMessage()
这里我得到的字段名是firstName。有没有办法注释该字段并将值设置为"First Name"?同样有没有办法通过注解设置代码值?
为此,您需要创建自己的约束。您可以添加其他属性、标签、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
最简单的方法 (IMO) 似乎仍然需要大量工作才能获得微不足道的 (IMO) 好处。 getFieldError
的结果由 Validator
提供。知道这一点后,您可以为 DataBinder
提供自定义验证器。您的验证器可能如下所示:
首先定义你的自定义验证器
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"); } } }
}
之后,您现在使用上下文的数据绑定器注册您的自定义验证器(我假设您是 运行 Spring MVC):
@InitBinder protected void initBinder(WebDataBinder binder) { binder.addValidators(new FirstNameValidator()); }
这将确保您获得所需格式的名称。同样,对于一些花哨的文本,它需要大量的输入(基于注释的方法同样长,需要更多的输入来支持注释)。