我有一个正在运行的自定义约束。
我想从我的消息包中发送要解析的错误代码。
当我这样做时:
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate("{customConstraint.duplicateName}")
.addConstraintViolation();
读取属性并显示正确的文本。
当我尝试这个时:
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate("{customConstraint.duplicateName}")
.addPropertyNode(null).inIterable().atKey(field)
.addPropertyNode("name")
.addConstraintViolation();
解析了正确的节点,但忽略了该消息,并且属性代码为
' CustomConstraint.mapName[field].name
'归还。
我有' org.hibernate:hibernate-validator:5.1.3.Final
'
有人可以告诉我为什么在定义节点路径时忽略了消息?
修改
这是约束定义:
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy=CustomConstraintImpl.class)
public @interface CustomConstraint{
String message() default "{CustomConstraint.mapName}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
这是实现类的一部分:
public class CustomConstraintImpl implements ConstraintValidator<CustomConstraint, Map<String, Object>> {
@Override
public void initialize(CustomConstraint c) {
// TODO Auto-generated method stub
}
@Override
public boolean isValid(Map<String, Object> map, ConstraintValidatorContext context) {
...
...
in this method is where the above context code is being called
}