Java 用JSR-303进行方法参数验证
JSR-303是否也用于方法参数验证 如果有的话,网络上有什么例子吗?我面临的最大挑战是如何在每个方法中获得验证器。对于Spring3,这难道不意味着我必须用Java 用JSR-303进行方法参数验证,java,spring,bean-validation,Java,Spring,Bean Validation,JSR-303是否也用于方法参数验证 如果有的话,网络上有什么例子吗?我面临的最大挑战是如何在每个方法中获得验证器。对于Spring3,这难道不意味着我必须用LocalValidatoryFactoryBean注入几乎每个类吗 谢谢 每个JSR303注释的注释说明如下: @Target(value={METHOD,FIELD,ANNOTATION_TYPE,CONSTRUCTOR,PARAMETER}) 请参阅,参数。所以,是的,这在技术上是可能的 下面是一个例子: public void m
LocalValidatoryFactoryBean
注入几乎每个类吗
谢谢 每个JSR303注释的注释说明如下:
@Target(value={METHOD,FIELD,ANNOTATION_TYPE,CONSTRUCTOR,PARAMETER})
请参阅,参数
。所以,是的,这在技术上是可能的
下面是一个例子:
public void method(@NotNull String parameter) {
// ...
}
但是,我不确定它是如何与Spring集成的,因为我没有使用它。您可以试一试。这听起来像是AOP(AspectJ)的一个用例。为使用
javax.validation.constraints.*
注释的方法编写切入点,在方面中插入验证器(可能使用Spring),并在方法执行之前使用@Before
或@Around
建议执行验证
阅读以供参考。即将发布的JSR303参考实现Hibernate Validator 4.2版将支持方法级验证 如前一个答案所指出的,这将允许在方法参数处指定约束注释(内置类型和自定义定义类型),并返回值来指定方法调用的前置和后置条件 请注意,HV只处理方法调用的实际验证,而不触发此类验证。验证调用可以使用AOP或其他方法拦截工具(如JDK的动态代理)完成 这方面的JIRA问题是HV-347[1],因此您可能希望将自己添加为该问题的观察者
[1] 您可以使用(我是开发人员),它集成了JSR303和AspectJ。实际验证由JSR303实现之一完成,您必须将其添加到类路径中,如Hibernate Validator或Apache BVal。在Spring 3.1.0中,您可以使用@Validated annotation在pojo上激活验证。 为pojo类创建一个接口,并将此注释置于其上,然后在方法定义中添加验证注释。(该接口是必需的,因为Spring将使用该接口作为定义创建代理类) 您的pojo:
public class PojoClassImpl implements PojoClass {
public String doSomething(String input) {
return "";
}
}
从具有活动验证的标准spring web应用程序开始,记住在spring配置中添加以下bean声明:
<bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor"/>
我认为你的博客文章补充了你的答案;)古纳尔很好地把他的解决方案付诸实践。对我来说效果很好。出于某种奇怪的原因,ConstraintViolationException public\@NotNull String doSomething();无效,但\@NotNull公共字符串doSomething();做使用该条来转义被S.O.与用户混淆的At符号
<bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor"/>