Spring 5中的服务层bean验证?

问题描述

我需要验证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>