我正在验证车辆列表,我想向用户提供一条自定义消息,更好地描述错误。
我目前可以使用
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'
这样的事情可能吗?
我正在验证车辆列表,我想向用户提供一条自定义消息,更好地描述错误。
我目前可以使用
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'
这样的事情可能吗?
使用内置约束不可能开箱即用。
您可以实现自定义约束和验证器,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;
}
}