在Java中,验证具有使用@NonNull注释的属性的对象的最佳方法

时间:2017-05-30 18:30:07

标签: java spring validation karaf blueprint

我在Java中实现了一个API网关,其中请求对象有很多字段和子对象。有许多属性required(不应该为空),有些属性是可选的。

代码在Karaf中运行并且正在使用Blueprint,所以一些基于Spring的机制是可能的,但我们现在没有使用Spring(虽然我熟悉各种Spring框架)。

我知道Eclipse @NonNull注释,我可以将该注释添加到需要返回非空值的getter方法。

我希望能够做的是在请求对象上运行可重用的方法,该方法将确定是否存在任何约束违规并返回人类可读的错误消息(或其他内容)。

似乎有各种方法可以做到这一点,但我不确定在我的情况下哪种框架策略有意义。例如,有commons-validator,但这似乎是网页表单特有的。我还看到了hibernate validator的一些文档,但这似乎不适用于此。

1 个答案:

答案 0 :(得分:1)

你可以使用oracle Validation API JSR-303,它是独立的框架,可以在基于web的应用程序中使用,而且没有基于web的应用程序,Hibernate为JSR-303提供了实现。 您可以在pom.xml文件

中包含以下依赖项
<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>

和实施

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.2.1.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator-annotation-processor</artifactId>
    <version>5.2.1.Final</version>
</dependency>
你可以在bean对象中使用@NotEmpty@NotNull@Range ....这样的注释 您也可以根据需要配置每个注释,例如,您可以向@NotNull注释添加自定义消息,例如

@NotNull(message = "First Name cannot be null")
private String firstName;

用于验证工作只是用@Valid注释实体并将另一个参数添加到BindingResult类型的控制器方法

@RequestMapping(value = "/addUser", method = RequestMethod.POST)
public String addUser(@Valid User user, BindingResult result) {

        if (result.hasErrors()) {
            return "errorPage";
        } else {
            return "Done";
        }
    }