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

在Java中,验证带有@NonNull注释属性的对象的最佳方法,java,spring,validation,karaf,blueprint,Java,Spring,Validation,Karaf,Blueprint,我正在用Java实现一个API网关,其中请求对象有很多字段和子对象。有许多属性是必需的(不应为null),有些属性是可选的 代码在Karaf中运行,并且使用Blueprint,因此一些基于Spring的机制是可能的,但是我们现在并没有使用Spring的很多功能(尽管我熟悉各种Spring框架) 我知道Eclipse@NonNull注释,我可以将该注释添加到需要返回非null值的getter方法中 我希望能够在请求对象上运行一个可重用的方法,该方法将确定是否存在任何约束冲突,并返回一条人类可读的错

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

代码在Karaf中运行,并且使用Blueprint,因此一些基于Spring的机制是可能的,但是我们现在并没有使用Spring的很多功能(尽管我熟悉各种Spring框架)

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

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


似乎有多种方法可以做到这一点,但我不确定在我的情况下什么样的框架策略是有意义的。例如,有
公共验证程序
,但这似乎是特定于网页表单的。我还看到了一些关于
hibernate验证器的文档,但这似乎不适用于这里。

您可以使用oracle验证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>
要进行验证,只需使用
@Valid
注释实体,并向BindingResult类型的控制器方法添加另一个参数

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

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

注释,以及方法开头的每个参数的
Objects.requirennull()
。如果不满足先决条件,NPE将以响亮且快速的方式失败。对不起,我需要更多信息。你能分享一些示例代码吗?我认为这对你来说是一个更好的问题。我没有使用spring请求处理,但大部分仍然适用。
@NotNull(message = "First Name cannot be null")
private String firstName;
@RequestMapping(value = "/addUser", method = RequestMethod.POST)
public String addUser(@Valid User user, BindingResult result) {

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