Как получить значение аннотации @Size над полем объекта - PullRequest
0 голосов
/ 10 октября 2019

Мне нужно перетащить через поле значение атрибута из аннотации @ Size

private static int getMaxLimitSize(Field field){

    field.setAccessible(true);
    Size annotation = field.getAnnotation(Size.class);

    int zero = 0;

    if(annotation == null) return zero;

    return annotation.max();

}

, здесь есть ограничение @ Size для объекта типа dtofield

 @Size(message = "{validate.documentid.size}", max = 36)
private String documentId;

Но когда я пытаюсь получить аннотацию, я получаю null

Size annotation = null;

Эта аннотация находится над объектами типа dto и не обрабатывается, но когда обрабатывается сущность , эта аннотация видна? !!!

с использованием Spring Boot

ошибка сообщения находятся в файле - ValidationMessages.propertie s

@Configuration
public class ServiceConfig implements WebMvcConfigurer {



    @Bean
    public MessageSource messageSource() {
        ResourceBundleMessageSource source = new ResourceBundleMessageSource();
        source.setDefaultEncoding("UTF-8");
        source.setBasename("classpath:ValidationMessages");
        return source;
    }

    @Nullable
    @Override
    public Validator getValidator() {
        LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
        validator.setValidationMessageSource(messageSource());
        return validator;
    }

}

Вот что передается в методе - getMaxLimitSize () ,Тип Поле

private static void processLimitValidateForField(Field field, Object object, List<Object> values){

    Class<?> type = field.getType();
    String typeName = type.getSimpleName();

    boolean isTypeClassOfString = isStringType(typeName);

    int limitString = 0;

    if(isTypeClassOfString){
        limitString = getMaxLimitSize(field);
        setValue(field, typeName, object, values, limitString);
    } else {
        setValue(field, typeName, object, values, limitString);
    }
}

Пожалуйста, объясните, почему объект dto не виден валидатору или почему отражение не видит аннотацию валидатора и что можно сделать?

Как это можно исправить

1 Ответ

0 голосов
/ 10 октября 2019

вы можете получить field value, вызвав метод Field#get(currentObject)

if (field.isAccessible()) {
    Object someValue = field.get(object);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...