В этом приложении есть несколько объектов, которые поступают из пользовательского ввода, они должны быть проверены перед обработкой.
Мне нужна аннотация и валидатор для повторного использования для нескольких объектов.
Один из примеров - поставщик и обработчик.Некоторые объекты имеют поля кода поставщика и обработчика.Проверка должна проверить, совместим ли данный код обработчика с данным кодом провайдера.Эти поля называются по-разному во всех объектах, даже помечены для обработки 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!
Может ли кто-нибудь предоставить фрагмент кода?