Spring服务方法验证

时间:2017-08-23 14:23:50

标签: spring

我有一个使用@Validated注释的服务类。 在这个类中,我有一个带有@Valid注释的参数的方法。 如果从具有无效参数的另一个类实例调用该方法,则抛出异常。 正如预期的那样,抛出了类型为ConstraintViolationException的错误。

如果我从另一个服务方法(内部调用)调用此方法,则不执行验证,并且在方法体中出现错误。 这不是我想要的。显然,来自内部的调用未经过验证。 调查问题我发现该方法没有使用Spring代理bean调用。 我通过从(@Autowired)应用程序上下文中检索代理并使用代理调用方法来解决问题:

((T) context.getBean(this.getClass()).myMethod(validatedArgument)

这是一个丑陋的解决方案。 如何配置Spring以便验证从内部进行的方法调用?

2 个答案:

答案 0 :(得分:0)

将服务自动装配到自身有一种棘手的方法。

@Service
public class MyService {

  @Autowired
  private MyService copy;

  private void call() {
    //myMethod(validatedArgument);
    copy.myMethod(validatedArgument);
  }
}

答案 1 :(得分:0)

Spring处理方面的方式是,只有当一个实例将消息发送到另一个实例时才会调用它们。有一些方法可以克服这个问题,但在你的情况下,你想要这样做的事实可能揭示了一个设计缺陷。