jeudi 10 octobre 2019

How to get the value of the @Size annotation, above the field of object

I need to pull over the field the attribute value from the @Size annotation

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();

}

here is the @Size constraint over the dto type object field

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

But when I try to get an annotation, I get null

Size annotation = null;

This annotation is above objects of type dto and is not processed, but when the entity is processed, then this annotation is visible ?!!!

using Spring Boot

the error messages are in the file - ValidationMessages.properties

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

}

Here's what is passed in the method - getMaxLimitSize(), type Field

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

Please explain why the dto object is not visible to the validator, or why reflection does not see the validate annotation and what can be done?

How can this be fixed ?





Aucun commentaire:

Enregistrer un commentaire