Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用JSR-303进行方法参数验证_Java_Spring_Bean Validation - Fatal编程技术网

Java 用JSR-303进行方法参数验证

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

JSR-303是否也用于方法参数验证

如果有的话,网络上有什么例子吗?我面临的最大挑战是如何在每个方法中获得验证器。对于Spring3,这难道不意味着我必须用
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"/>