Не работает аннотация

228
04 мая 2017, 12:45

Есть приложение, в котором не работает валидация одного поля сущности. Суть её работы заключается в проверке на уникальность по значению поля среди записей в базе данных. Аннотация

@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);
}
}

Прошу помощи у знающих, т.к сам не очень разбираюсь пока в этом. Заранее спасибо

READ ALSO
как добавить свой класс в стандартный пакет jdk?

как добавить свой класс в стандартный пакет jdk?

Есть ObjectInputStream, мне требуется добавить в него логированию и складывать в стек все объекты,что записываютсяРешение - расширить существующий...

241
Не могу понять JMS

Не могу понять JMS

Мне дали задание разработать отправку сообщений в брокер и получение от туда на языке программирования java используя Java Message ServiseДело в том...

222
Вывод файлов и подкаталогов java [требует правки]

Вывод файлов и подкаталогов java [требует правки]

Стоит задача написать метод, который возвращает массив подкаталогов и файлов в заданной директорииКод работает, но ничего не выводит на экран

222
как передать &ldquo;тяжелую&rdquo; строку?

как передать “тяжелую” строку?

В переменной - свёрстанная страница письмаПри компиляции ошибка:

254