我需要验证在Spring5应用程序中作为参数提供给服务层方法的bean。我可以让验证在控制器上工作,但是在服务层,@Valid注释被忽略了。服务类用@Validated注解,它的一个实例被自动连接到进行方法调用的控制器类中。
我需要在非Boot应用程序中执行此操作。我找到了一些说明,但它们是特定于Boot的。
我在这里遗漏了什么,为什么这可以在控制器上工作,而不能在控制器到服务层的调用上工作?基于一些谷歌搜索,在控制器级别上,这可能以某种方式连接到DispatcherServlet?
我需要做什么才能让它在服务层上工作?我之所以想在服务层这样做,是因为我们在其他应用程序(Jersey框架+较旧的Spring)的服务层上进行了验证,而其他应用程序则希望保持一致性。
发布于 2020-08-27 23:58:32
它适用于@Controller类处理程序方法的原因是,Spring使用了一个名为ModelAttributeMethodProcessor的特殊HandlerMethodArgumentResolver,它在解析要在处理程序方法中使用的参数之前执行验证。
正如我们所说的,服务层只是一个普通的bean,没有额外的行为。
您可以显式使用SpringValidator
@Bean
public SpringValidator<ClassToValidate> springValidator() {
SpringValidator<ActivityCsvDTO> springValidator = new SpringValidator<>();
springValidator.setValidator(localValidatorFactoryBean());
return springValidator;
}并直接调用validate()方法
try {
springValidator.validate(ObjectToValidate);
} catch (Exception e) {
return log.error("error validation", e);
}https://stackoverflow.com/questions/63618897
复制相似问题