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

如果是这样,网络上是否有示例?我面临的最大挑战是如何在每种方法中获得验证器。使用Spring 3,这并不意味着我必须将几乎每个班级注入 LocalValidatorFactoryBean?

谢谢!

有帮助吗?

解决方案

这听起来像是AOP的用例(extackJ)。为注释的方法编写一个点尺 javax.validation.constraints.*, ,将验证器注入该方面(可能使用Spring)并使用 @Before 或者 @Around 建议在执行方法之前执行验证。

aptivej在行动中 以供参考。

其他提示

方法级别验证将在JSR 303参考实现Hibernate验证器的即将发布的4.2版中支持。

正如上一个答案中指出的那样,这将允许通过方法参数指定约束注释(内置和自定义类型),并返回值,以指定方法调用的条件和后条件。

请注意,HV仅处理未触发此类验证的方法调用的实际验证。可以使用AOP或其他方法拦截设施(例如JDK的动态代理)进行验证调用。

JIRA问题是HV-347 [1],因此您可能需要将自己添加为Watcher。

[1] http://opensource.atlassian.com/projects/hibernate/browse/hv-347

Javadocs 对于JSR 303注释中的每一个都告诉以下内容:

@Target(value={METHOD,FIELD,ANNOTATION_TYPE,CONSTRUCTOR,PARAMETER})

看, PARAMETER 在那儿。所以,是的,是 从技术上讲 可能的。

这是一个例子:

public void method(@NotNull String parameter) {
    // ...
}

但是,由于我不使用它,我不确定如何与春季集成。您可以尝试一下。

在春季3.1.0中,您可以使用@Validated注释来激活POJO上的验证。为POJO类创建一个接口,将此注释放在其上,然后在方法定义中添加验证注释。 (需要接口,因为Spring将使用接口作为定义创建代理类)

@Validated
public interface PojoClass  {
    public @NotNull String doSomething(@NotEmpty String input);
}

你的pojo:

public class PojoClassImpl implements PojoClass {
    public String doSomething(String input) {
        return "";
    }
}

从具有主动验证的标准春季Web应用程序开始,请记住在您的春季配置中添加此BEAN声明:

<bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor"/>

您可以使用 jcabi apects (我是开发人员),将JSR 303与extackJ集成在一起。实际验证是由JSR 303实现之一完成的,您必须将其添加到类路径,例如Hibernate验证器或Apache BVAL。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top