问题描述
我需要验证Spring 5应用程序中作为服务层方法的参数提供的bean。我可以通过验证来在控制器上工作,但是在服务层,@Valid注释将被忽略。服务类用@Validated注释,并且它的一个实例自动绑定到进行方法调用的控制器类中。
我需要在非引导应用程序中执行此操作。我找到了一些说明,但它们是特定于启动的。
我在这里缺少什么,为什么这在控制器上起作用,但在控制器到服务层的呼叫上却不起作用?基于某些谷歌搜索,在控制器级别,这可能以某种方式连接到dispatcherServlet?
要在服务层上进行这项工作,我需要做什么?我想在服务层上执行此操作的原因是,我们在其他应用程序(Jersey框架+较旧的Spring)中对服务层进行了验证,而其他应用程序则需要一致性。
解决方法
它适用于@Controller
类处理程序方法的原因是,Spring使用了一个特殊的HandlerMethodArgumentResolver
ModelAttributeMethodProcessor
,该@Bean
public SpringValidator<ClassToValidate> springValidator() {
SpringValidator<ActivityCsvDTO> springValidator = new SpringValidator<>();
springValidator.setValidator(localValidatorFactoryBean());
return springValidator;
}
执行 validation ,然后将参数解析为您的处理程序方法。
我们所说的服务层只是一个普通的bean,没有其他行为。
您可以显式使用 SpringValidator
validate()
并直接调用 try {
springValidator.validate(ObjectToValidate);
} catch (Exception e) {
return log.error("error validation",e);
}
方法
<div className="App">
{ mediumData[0] && <><h1>Tile 01: {mediumData[0].title} </h1>
<p>Link 01: {mediumData[0].link}</p>
<img src="" alt="img"/>
</>
}
</div>