是否有使用带注释的方法参数启用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中的错误)。方法。
- 是否可以在Java SE环境中使用javax.interceptor?
- AOP,Spring和事务范围
- Spring Transaction Management:使用@Transactional与使用AOP(<aop:advisor)
- 什么是为Spring AOP注入相同服务实例的最佳方式
- @Aspect方面的Spring autowired bean为null
- 通过Spring AOP + Aspectj进行exception处理
- 使用大量AOP请求范围bean时的性能问题
- 无法使用Spring LoadTimeWeaving将建议应用于第三方库(log4g – Logger.getLogger调用)?
- AspectJ加载时间weaver不会检测所有类