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

Java 设置自定义字段名和代码,java,spring,jakarta-ee,bean-validation,spring-validator,Java,Spring,Jakarta Ee,Bean Validation,Spring Validator,我正在尝试在我的Spring应用程序中使用Bean验证进行验证。我在bean中定义了以下字段- @NotNull(message = "CUSTOMERROR-1000") private String firstName; 在这里,我在属性文件中将CUSTOMERROR-1000定义为“字段是必需的”。在我的ControllerAdvice类中,我能够使用以下代码检索详细信息: getBindingResult().getFieldError().getField() getBindingR

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

@NotNull(message = "CUSTOMERROR-1000")
private String firstName;
在这里,我在属性文件中将CUSTOMERROR-1000定义为“字段是必需的”。在我的ControllerAdvice类中,我能够使用以下代码检索详细信息:

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

在这里,我将字段名作为firstName。是否有办法对字段进行注释并将值设置为“First Name”?类似地,是否有通过注释设置代码值的方法?

为此,您需要创建自己的约束。然后,您可以添加其他属性、标签、错误代码等,为它们设置值并使用它们。见:

然后,您可以这样定义错误消息:
错误代码:{errorCode}-{label}是强制性的

最简单的方法(IMO)似乎仍然需要大量的工作才能获得微不足道的好处(IMO)。
getFieldError
的结果由。知道了这一点,您就可以为
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");
                   }
          }
    
       }
    
    }

  • 之后,您现在可以使用上下文的databinder注册自定义验证器(我假设您在这里运行的是SpringMVC):


  • 这将确保您获得所需格式的名称。同样,对于一些花哨的文本,需要大量的键入(基于注释的方法同样长,需要更多的键入来支持注释)。

    为了利用JSR-303验证,我在bean中对字段(firstName)进行了注释。使用这一行“getBindingResult().getFieldError().getField()”,我能够得到字段名,即firstName。我可以使用此行“getBindingResult().getFieldError().getDefaultMessage()”获取默认消息。然而,是否有一种方法可以传递类似于传递默认消息的客户错误代码。例如:@NotNull(code=“ERR-CUST-01”)。我还想传递“firstName”,而不是获取字段名“firstName”。例如:@NotNull(label=“First Name”)。我想检查是否可以使用一些注释设置自定义字段名和错误代码值,并在将错误返回给消费者时检索。您是否专门寻找仅注释的方法?是的,我更喜欢注释。任何其他标准方法也会有所帮助。自定义约束将能够处理您需要的任何必要的自定义验证属性。此外,根据他们的属性文件,他们可能想查看自定义消息构造。好吧,这肯定是我的选择,我猜他使用相同的道具。对于多个字段,需要一种自定义方法,如添加文件名等。
    @InitBinder
    protected void initBinder(WebDataBinder binder) {
        binder.addValidators(new FirstNameValidator());
    }