Я реализовал настраиваемую аннотацию проверки для запроса в Spring Rest Controller, которая проверяет, доступно ли field2 в теле запроса ввода, тогда field1 не должно быть пустым. Мой вопрос: как мне избавиться от поля UserInputDTO.userInputDTO в моем ответе на ошибку (перед передачей его в ExceptionHandler)?
Примечание: Мне это нужно, потому что я не хочу раскрывать конфиденциальные данные ( Имя класса и Имя экземпляра ) в ответе на ошибку. Я отладил это и попытался, но не смог удалить путь по умолчанию или базовый путь (из PathImpl ) из объекта ConstraintValidatorContextImpl .
Ответ на ошибку
{
status : 400
title : Bad Request: Field 'UserInputDTO.userInputDTO' : field1 should not be empty if Field2 is present
}
Класс аннотации
@Documented
@Constraint(validatedBy = UserInputValidator.class)
@Target( { ElementType.METHOD, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface UserInputConstraint {
String message() default "Invalid request";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
Класс валидатора
public class UserInputValidator implements
ConstraintValidator<UserInputConstraint, UserInputDTO> {
@Override
public void initialize(UserInputConstraint userInputConstraint) {
}
@Override
public boolean isValid(UserInputDTO userInputDTO,
ConstraintValidatorContext cxt) {
boolean isValid=true;
String errorMessage = null;
if (userInputDTO.field2 != null && userInputDTO.field1 == null) {
isValid = false;
context.buildConstraintViolationWithTemplate("field1 should not be empty if Field2 is presen").addConstraintViolation();
}
return isValid;
}