Пользовательское разрешение сообщения проверки гибернации - PullRequest
0 голосов
/ 18 марта 2019

В этом приложении есть несколько объектов, которые поступают из пользовательского ввода, они должны быть проверены перед обработкой.

Мне нужна аннотация и валидатор для повторного использования для нескольких объектов.

Один из примеров - поставщик и обработчик.Некоторые объекты имеют поля кода поставщика и обработчика.Проверка должна проверить, совместим ли данный код обработчика с данным кодом провайдера.Эти поля называются по-разному во всех объектах, даже помечены для обработки JSON под разными именами.

Поэтому мне нужно что-то вроде этого:

@HandlerProviderValid(handlerJsonProperty = "handler_code", providerJsonProperty = "provider_code", message = "{handler_provider_invalid}")
public class Package {

    @JsonProperty("handler_code")
    private String hCode;

    @JsonProperty("provider_code")
    private String pCode;

}


@Retention(RUNTIME)
@Target({ TYPE })
@Constraint(validatedBy = HandlerProviderValidator.class)
public @interface HandlerProviderValid {
    String message();

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    String handlerJsonProperty();

    String providerJsonProperty();
}



public class HandlerProviderValidator implements ConstraintValidator<HandlerProviderValid, Object> {

    private String handlerJsonProperty;
    private String providerJsonProperty;
    private String message;

    @Override
    public void initialize(HandlerProviderValid constraintAnnotation) {
        ConstraintValidator.super.initialize(constraintAnnotation);

        handlerJsonProperty = constraintAnnotation.handlerJsonProperty();
        providerJsonProperty = constraintAnnotation.providerJsonProperty();
        message = constraintAnnotation.message();
    }

    @Override
    public boolean isValid(Object validatedObject, ConstraintValidatorContext context) {
        String handlerCode = ReflectiveUtils.findAnnotatedString(handlerJsonProperty);
        String providerCode = ReflectiveUtils.findAnnotatedString(providerJsonProperty);

        if (!isHandlerProviderCompatible(handlerCode, providerCode)) {
            context.disableDefaultConstraintViolation();

            // I assume here I should handle parameters into the message?
            context.buildConstraintViolationWithTemplate(message).addConstraintViolation();

            return false;
        }

        return true;
    }

}

Файл свойств:

handler_provider_invalid=Given handler code ${handler_code} is incompatible with given provider code ${provider_code}!

Вопрос: как я могу разрешить заполнители $ {handler_code} и $ {provider_code} в этом примере сообщения?Цель состоит в том, чтобы показать пользователю, что введенные данные неверны.

Данный код обработчика AS несовместим с данным кодом провайдера TL!

Может ли кто-нибудь предоставить фрагмент кода?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...