Search code examples
javaspringvalidationspring-validator

Override error message in spring validator


Say I make rest service with Spring.

Say I need custom validator wich is applied to whole type/class i.e. @Target({ElementType.TYPE}). Validator has pretty clumsy logic which cannot be reduced to subvalidators or field-validators.

So sometimes it is rather difficult to understand what exactly is wrong and I need to add different error messages.

I can't get how to do that. Is it possible?

For example like:

public class ReportConstraintValidator implements ConstraintValidator<ValidReport, Report> {

    @Autowired
    DesignRepository designRepository;

    @Override
    public void initialize(ValidReport constraintAnnotation) {
    }

    @Override
    public boolean isValid(Report report, ConstraintValidatorContext context) {
        ...
        // here goes "foo error message"
        return false;
        ...
        // here goes "bar error message"
        return false;
    }
}

Solution

  • Solved as M.Denium proposed

    public class ReportConstraintValidator implements ConstraintValidator<ValidReport, Report> {
    
    @Autowired
    DesignRepository designRepository;
    
    @Override
    public void initialize(ValidReport constraintAnnotation) {
    }
    
    @Override
    public boolean isValid(Report report, ConstraintValidatorContext context) {
        ...
        context.buildConstraintViolationWithTemplate("foo error message").addConstraintViolation();
        return false;
        ...
        context.buildConstraintViolationWithTemplate("foo error message").addConstraintViolation();
        return false;
    }
    }