有没有一种标准的方式使用注释的方法参数,使JSR 303 Bean验证

问题描述 投票:10回答:3

我一直在寻找,现在一有一段时间了,没有运气。 I'n不使用Spring MVC的,但还是想用@javax.validation.Valid启用的方法的参数验证。举个例子

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

使用MVC,这是@Controller注解的bean启用了一个简单的<mvc:annotation-driven/>(见5.7.4.3 Configuring a JSR-303 Validator for use by Spring MVC)。

使用AOP应该是很微不足道的。不过,我怀疑有做一些这方面的标准方式。因此,问题:是否有非MVC应用程序和非控制器豆类似的事情,使输入验证的注解豆?

java spring aop bean-validation hibernate-validator
3个回答
7
投票

方法级验证是不是Bean验证规范(JSR 303)的一部分。方法级的验证是在appendix C增加了规范的建议。

Hibernate验证4.2(一个测试是的话)正在执行这个建议,并且允许放置JSR 303注解方法参数和返回值。当然,你仍然需要一些胶水春季代码,但不应该太硬。

此外Bean验证1.1将正式加入方法级验证的规范(不只是作为附录/推荐)。参见http://beanvalidation.org/


4
投票

使用MVC,这是@Controller的豆启用

@Valid只是在控制器豆类标记隐藏,做了验证,并把所有违反约束Errors在一个不错的方式代码。春季设计师们已经发明了自己的注释做同样的事情。

真正使用@Valid注释的是在类(豆),您与JSR 303验证器验证和其主要用途是验证对象图。这意味着一个bean可以有@Valid注释其他bean引用递归触发验证。

MVC的外面,你可以使用配置验证器来验证使用JSR 303注解的bean,但不像在控制器中的填充很好Errors,你将不得不决定自己,你会与约束违规做什么。

因此,要回答你的问题,没有标准的方式。若要将外观作为控制器一样,你可以使用@Valid注释(或创建一个新)运行AOP通知来验证豆和填充“ViolationCollector”(类似MVC中的错误)必须传递到方法。


1
投票

答案似乎很老。截至目前,您可以利用@ValidatedMethodValidationPostProcessor任何的Spring bean的方法在线验证。他们基本上是负责专门创建的切入点类似的行为春季管理的任何层的豆,而不是控制器。另请参阅我的其他answer

© www.soinside.com 2019 - 2024. All rights reserved.