【问题标题】:in Java, best way to validate objects with properties annotated with @NonNull在 Java 中,使用 @NonNull 注释的属性验证对象的最佳方法
【发布时间】:2017-05-30 18:30:06
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 注解,以及方法开头的每个参数的Objects.requireNonNull()。如果不满足先决条件,NPE 将很快失败。
  • 抱歉,我需要更多信息。
  • 你能分享一些示例代码吗?
  • 我认为这对你来说是一个更好的问题。

标签: java spring validation karaf blueprint


【解决方案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";
        }
    }

【讨论】:

  • 我没有使用 spring 请求处理,但大部分仍然适用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-26
  • 2023-03-04
  • 2022-06-16
相关资源
最近更新 更多