我有一个使用@Validated注释的服务类。 在这个类中,我有一个带有@Valid注释的参数的方法。 如果从具有无效参数的另一个类实例调用该方法,则抛出异常。 正如预期的那样,抛出了类型为ConstraintViolationException的错误。
如果我从另一个服务方法(内部调用)调用此方法,则不执行验证,并且在方法体中出现错误。 这不是我想要的。显然,来自内部的调用未经过验证。 调查问题我发现该方法没有使用Spring代理bean调用。 我通过从(@Autowired)应用程序上下文中检索代理并使用代理调用方法来解决问题:
((T) context.getBean(this.getClass()).myMethod(validatedArgument)
这是一个丑陋的解决方案。 如何配置Spring以便验证从内部进行的方法调用?
答案 0 :(得分:0)
将服务自动装配到自身有一种棘手的方法。
@Service
public class MyService {
@Autowired
private MyService copy;
private void call() {
//myMethod(validatedArgument);
copy.myMethod(validatedArgument);
}
}
答案 1 :(得分:0)
Spring处理方面的方式是,只有当一个实例将消息发送到另一个实例时才会调用它们。有一些方法可以克服这个问题,但在你的情况下,你想要这样做的事实可能揭示了一个设计缺陷。