У меня есть pojo, которое является общим для нескольких сервисов, и у каждого из них есть свои правила проверки для этого объекта. Итак, я расширяю это pojo в каждом из моих сервисов, переопределяю некоторые из установщиков и бросаю проверки ограничений на эти переопределенные методы. Pojo создается из представленного JSON через вызов REST. Джексон - это библиотека, которая должна вызывать сеттер.
@JsonSetter("name")
public void setName(@Length(min = 1, max = 50) @NotBlank String name) {
this.name = name;
}
Вот мое объявление метода REST:
public ResponseEntity<?> createEntity(@Valid @RequestBody EntityDTO entity) {
Кажется, что проверка не работает, в частности, с Джексоном, поскольку я вижу validateParameters
метод org.hibernate.validator.internal.engine.ValidatorImpl
, вызываемый другими методами.
Вот как мой ValidationConfiguration
боб выглядит так:
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.validation.MessageInterpolatorFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
import org.springframework.validation.beanvalidation.MethodValidationPostProcessor;
import javax.validation.Validator;
@Configuration
public class ValidationConfiguration {
public ValidationConfiguration() {
}
@Bean(name = "overriddenValidator")
public Validator validator() {
LocalValidatorFactoryBean factoryBean = new LocalValidatorFactoryBean();
factoryBean.setParameterNameDiscoverer(new CustomParameterNameDiscoverer());
MessageInterpolatorFactory interpolatorFactory = new MessageInterpolatorFactory();
factoryBean.setMessageInterpolator(interpolatorFactory.getObject());
return factoryBean;
}
@Bean
public static MethodValidationPostProcessor methodValidationPostProcessor(Environment environment, @Qualifier("overriddenValidator") Validator validator) {
validator.forExecutables();
MethodValidationPostProcessor processor = new MethodValidationPostProcessor();
boolean proxyTargetClass = (Boolean) environment.getProperty("spring.aop.proxy-target-class", Boolean.class, true);
processor.setProxyTargetClass(proxyTargetClass);
processor.setValidator(validator);
return processor;
}
}
Я также проверяю параметры запроса, и он работает хорошо. Однако, это не работает для этого сеттера.