Есть приложение, в котором не работает валидация одного поля сущности. Суть её работы заключается в проверке на уникальность по значению поля среди записей в базе данных. Аннотация
@Validation
из пакета
org.springframework.validation.annotation;
Находится в контроллере
@ResponseBody
public JsonResponseWrapper createCardProduct(@Validated @RequestBody CardProductDto dto) throws BusinessLogicException {
dto = cardProductService.save(dto);
accessLogService.create().item(ItemType.CARD_PRODUCT).id(String.valueOf(dto.getId())).type(AccessType.CREATE)
.fields(dto.getCode(), dto.getRangeStart() + "-"+dto.getRangeEnd(), dto.getBankDto().getCode(), dto.getCardProductType().name(), dto.getScheme().name())
.save();
return JsonResponseWrapper.success(dto);
}
Когда в контроллер поступает dto вида
public class CardProductDto extends IdentifierDto<Long> implements Dict{
@NotNull
private BankDto bankDto;
@UniqueIdentifier(service = CardProductService.class, message = "{cardproduct.validation.name.size}")
@Size(max = 8, message = "{cardproduct.validation.code.size}")
@NotEmpty
private String code;
@Size(max = 255, message = "{cardproduct.validation.name.size}")
@NotEmpty
private String name;
@Size(max = 255, message = "{cardproduct.validation.descr.size}")
private String description;
private CardProductScheme scheme;
@Pattern(regexp = "\\d{6,19}", message = "{cardproduct.validation.range.size}")
@NotEmpty
@NotNull
private String rangeStart;
@Pattern(regexp = "\\d{6,19}", message = "{cardproduct.validation.range.size}")
@NotEmpty
@NotNull
private String rangeEnd;
private CardProductType cardProductType;
private String imgAssetId;
private boolean contactlessSupported;
private boolean dsprSupported;
private String registrationDate;
private String updateDate;
private boolean active;
то все аннотации типа @Size @NotEmpty отрабатывают корректно, а аннотация @UniqueIdentifier по какой-то неизвестной мне причине не работает
Аннотация @UniqueIdentifier
@Target({ ElementType.ANNOTATION_TYPE, ElementType.TYPE, ElementType.FIELD
})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = UniqueIdentifierValidator.class)
@Documented
public @interface UniqueIdentifier {
public String message() default "{not.unique.entity}";
public Class<? extends GenericService> service();
public Class<?> [] groups() default {};
public Class<? extends Payload>[] payload() default {};
}
Её реализация
public class UniqueIdentifierValidator implements ConstraintValidator<UniqueIdentifier, String> {
private GenericService genericService;
@Override
public void initialize(UniqueIdentifier constraintAnnotation) {
if (genericService == null) {
genericService = ApplicationContextHolder.getBean(constraintAnnotation.service());
}
}
@Override
@SuppressWarnings("unchecked")
public boolean isValid(String value, ConstraintValidatorContext context) {
return !genericService.isExists(value);
}
}
Прошу помощи у знающих, т.к сам не очень разбираюсь пока в этом. Заранее спасибо
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть ObjectInputStream, мне требуется добавить в него логированию и складывать в стек все объекты,что записываютсяРешение - расширить существующий...
Мне дали задание разработать отправку сообщений в брокер и получение от туда на языке программирования java используя Java Message ServiseДело в том...
Стоит задача написать метод, который возвращает массив подкаталогов и файлов в заданной директорииКод работает, но ничего не выводит на экран