1

我正在验证车辆列表,我想向用户提供一条自定义消息,更好地描述错误。

我目前可以使用

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'

这样的事情可能吗?

4

1 回答 1

2

使用内置约束不可能开箱即用。

您可以实现自定义约束和验证器,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;
    }
}
于 2013-08-30T14:56:01.863 回答