是否有使用带注释的方法参数启用JSR 303 Bean Validation的标准方法

我一直在寻找一段时间而没有运气。 我没有使用Spring MVC,但仍希望使用@javax.validation.Valid来启用方法参数的validation。 举个例子

 public class EventServiceImpl implements IEventService { @Override public void invite(@Valid Event event, @Valid User user) { ... } } 

使用MVC,这为@Controller注释bean启用了一个简单的 (参见5.7.4.3配置一个JSR-303validation器供Spring MVC使用 )。

使用AOP应该是非常简单的。 不过,我怀疑有一些标准的方法可以做到这一点。 因此,问题是:对于非MVC应用程序和非控制器bean,是否存在类似的事情,以便为带注释的bean启用输入validation?

方法级别validation不是Bean Validation规范(JSR 303)的一部分。 方法级别validation是附录C中添加的规范中的建议。

Hibernate Validator 4.2(beta已经出来)正在实现这个建议,并允许在方法参数和返回值上放置JSR 303注释。 当然你仍然需要一些Spring胶水代码,但这不应该太难。

此外,Bean Validation 1.1将正式添加方法级别validation(不仅仅是附录/推荐)。 另见http://beanvalidation.org/

使用MVC,这为@Controller注释bean启用

@Valid只是Controller bean中的一个标记,它隐藏了执行validation的代码,并以一种很好的方式将所有约束违规放在Errors中。 Spring设计师可以发明自己的注释来做同样的事情。

@Valid注释的实际用途是在您使用JSR 303validation器validation的类(bean)中,其主要用途是validation对象图。 这意味着一个bean可以使用@Valid注释的其他bean引用来递归地触发validation。

在MVC之外,您可以使用已配置的validation程序来validation使用JSR 303注释的任何bean,但与控制器中填充良好的Errors不同,您必须自行决定要对约束违规执行的操作。

所以,回答你的问题,没有标准的方法。 要获得与控制器相同的外观,可以使用@Valid注释(或创建一个新注释)来运行AOP建议来validationbean并填充必须传递给a的’ViolationCollector’(类似于MVC中的错误)。方法。