我正在验证车辆列表,我想向用户提供描述错误的自定义消息。
我目前可以使用
NotNull.vehicle.name = 'Vehicle name has not been filled in'
然而,如果列表中有10辆车没有迹象表明哪辆车出错,我想做类似的事情
NotNull.vehicle[0].name = 'Vehicle item {index + 1}: name has not been filled in'
这样的事情可能吗?
答案 0 :(得分:1)
使用内置约束条件无法开箱即用。
您可以为List<Car>
实现自定义约束和验证器,并自行创建约束违规及其消息。使用节点构建器API,您仍然可以将违规点设置为正确的元素:
public class CarListValidator
implements ConstraintValidator<ValidCarList, List<Car>> {
@Override
public void initialize(ValidCarList constraintAnnotation) {
}
@Override
public boolean isValid(List<Car> cars, ConstraintValidatorContext constraintValidatorContext) {
boolean isValid = ...;
if ( !isValid ) {
int invalidIndex = ...;
constraintValidatorContext.disableDefaultConstraintViolation();
constraintValidatorContext
.buildConstraintViolationWithTemplate(
"name missing for car #" + invalidIndex
)
.addPropertyNode( "name" )
.inIterable()
.atIndex( invalidIndex )
.addConstraintViolation();
}
return isValid;
}
}