我有一个用@Validated注解的服务类。在这个类中,我有一个带参数的方法,这个参数用@Valid注释。如果从另一个带有无效参数的类实例调用该方法,则会引发异常。不出所料,抛出了ConstraintViolationException类型的错误。
如果我从另一个服务方法(内部调用)调用此方法,则不会执行任何验证,并且该方法的主体中会出现错误。这不是我想要的。显然,从内部发出的调用不会被验证。调查这个问题时,我发现该方法不是使用Spring代理bean调用的。我修复了这个问题,方法是从(@Autowired)应用程序上下文中检索代理,并使用代理调用方法:
((T) context.getBean(this.getClass()).myMethod(validatedArgument)
这是一个丑陋的解决方案。我如何配置Spring,以便从内部进行的方法调用得到验证?
发布于 2017-08-23 14:32:33
有一种巧妙的方法可以将服务自动绑定到自身。
@Service
public class MyService {
@Autowired
private MyService copy;
private void call() {
//myMethod(validatedArgument);
copy.myMethod(validatedArgument);
}
}
发布于 2017-08-23 14:57:19
Spring处理方面的方式是,只有当一个实例向另一个实例发送消息时才会调用这些方面。有一些方法可以克服这一点,但在您的情况下,您想要这样做的事实可能会暴露出设计缺陷。
https://stackoverflow.com/questions/45842429
复制