У меня есть аннотация, установленная для объектов типа dto , так же, как для объектов типа Entity . Аннотация работает с сущностями , но не с объектами типа dto .
Я работаю в SpringBoot . application.properties
validate.packageid.size = "The field 'PACKAGEID' can contain only {max} symbols.";
файл конфигурации
@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;
}
}
dto
@Size(message = "{validate.packageid.size}", max = 36)
private String documentId
сущность
@Column(name = "DOCUMENTID")
@Size(message = "{validate.packageid.size}", max = 36)
private String documentId;
Я не могу использовать аннотацию @ Действительный , поскольку я заполняю объект типа dto с помощью технологии отражения.
public static <S> S fillData (S object, List<Object> values){
return obtainMetadataOfObject(object, values);
}
Мне нужно иметь возможность получить аннотацию ограничения, или, скорее, его параметры, заданную в полях объекта dto (но в случае объекта dto я получаю значение null, поскольку Spring может не знать, чтоиспользовать аннотации ограничений, заданные для полей объекта dto), в случае объекта - получается, но Spritg задействует средство проверки объекта, поскольку оно управляет объектом как компонентом из контекста приложения.
Чтобы проверить dto на стороне веб-клиента, я использую аннотацию @ Valid в параметрах метода, обрабатывающего запрос от клиента
Для проверки dto из
Обновление
Я поставил анотуion @ Validation over dto и после этого я получил необходимые данные.
Это работает для классов, у которых нет наследника классов.
Я получаю данные аннотации @ 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();
}
Но это не работает для объектов, поля которых разбиты на несколько классов: несколько абстрактных и один.
Проверка не работает для составных объектов типа DTO , Любая помощь приветствуется?