Java 如何在自定义约束注释的约束冲突消息中显示字段名称描述?
如何在自定义约束注释的约束冲突消息中显示字段名称描述 例如,给定以下自定义约束注释Java 如何在自定义约束注释的约束冲突消息中显示字段名称描述?,java,bean-validation,jsr349,Java,Bean Validation,Jsr349,如何在自定义约束注释的约束冲突消息中显示字段名称描述 例如,给定以下自定义约束注释@Required、资源束ValidationMessages.properties、类Person,如何编写约束冲突消息“First Name is Required.”对于必填字段firstName和“Last Name is Required.”对于必填字段lastName @Documented @Constraint(validatedBy = {}) @Target({ ElementType.METH
@Required
、资源束ValidationMessages.properties
、类Person
,如何编写约束冲突消息“First Name is Required.”对于必填字段firstName
和“Last Name is Required.”对于必填字段lastName
@Documented
@Constraint(validatedBy = {})
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
@NotEmpty
@ReportAsSingleViolation
public @interface Required {
public abstract Class<?>[] groups() default {};
public abstract String message() default "{Required.message}";
public abstract Class<? extends Payload>[] payload() default {};
}
类人
:
public class Person {
@Required
private String firstName;
@Required
private String lastName;
}
没有可用于获取当前属性名称的API。如果有,您仍然需要执行一些字符串操作,从属性名“firstName”到显示名“firstName” 也就是说,我可以看到在
ConstraintValidatorContext
中公开当前路径的好处,它被传递给ConstraintValidator\isValid
。这是每个规范不可能的,但它可以作为特定于提供商的功能实现。您可以为Hibernate验证器创建一个问题请求
关于您的问题,imo的最佳解决方案是在
@Required`中添加“label属性”:
public class Person {
@Required(label="First Name"
private String firstName;
@Required(label="Last Name"
private String lastName;
}
然后可以在消息包中插入标签,如下所示:
Required.message={label} is required.
约束看起来像这样
@Documented
@Constraint(validatedBy = {})
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
@NotEmpty
@ReportAsSingleViolation
public @interface Required {
public abstract String label();
public abstract Class<?>[] groups() default {};
public abstract String message() default "{Required.message}";
public abstract Class<? extends Payload>[] payload() default {};
}
@已记录
@约束(validatedBy={})
@目标({ElementType.METHOD,ElementType.FIELD,ElementType.ANNOTATION_TYPE})
@保留(RetentionPolicy.RUNTIME)
@空空如也
@报告违规行为
需要公共@接口{
公共抽象字符串标签();
公共抽象类[]组()默认值{};
公共抽象字符串message()默认值“{Required.message}”;
公共抽象类ConstraintViolation ConstraintViolation。。
((PathImpl)constraintViolation.getPropertyPath()).getLeafNode().getName();如何将标签添加到@Replace
?请花点时间阅读中的。堆栈溢出的格式与其他站点不同。
@Documented
@Constraint(validatedBy = {})
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
@NotEmpty
@ReportAsSingleViolation
public @interface Required {
public abstract String label();
public abstract Class<?>[] groups() default {};
public abstract String message() default "{Required.message}";
public abstract Class<? extends Payload>[] payload() default {};
}