在 Java 中,使用 @NonNull 注释的属性验证对象的最佳方法
in Java, best way to validate objects with properties annotated with @NonNull
我正在 Java 中实现一个 API 网关,其中请求对象有很多字段和子对象。有许多属性是 required
(不应为空),有些属性是可选的。
Karaf 中的代码 运行s 并且正在使用蓝图,因此一些基于 Spring 的机制是可能的,但我们现在没有使用太多来自 Spring 的内容(尽管我熟悉各种 Spring 框架)。
我知道 Eclipse @NonNull
注释,我可以将该注释添加到 getter 需要 return 非空值的方法。
我希望能够做的是 运行 请求对象上的一个可重用方法,它将确定是否存在任何约束违规和 return 一个人类可读的错误消息 (或其他东西)。
似乎有多种方法可以做到这一点,但我不确定哪种框架策略对我的情况有意义。例如,有 commons-validator
,但这似乎是特定于网页表单的。我还看到了一些关于 hibernate validator
的文档,但这似乎不适用于此处。
您可以使用 oracle Validation API JSR-303,它是独立的框架,可用于基于 Web 和 none 基于 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";
}
}
我正在 Java 中实现一个 API 网关,其中请求对象有很多字段和子对象。有许多属性是 required
(不应为空),有些属性是可选的。
Karaf 中的代码 运行s 并且正在使用蓝图,因此一些基于 Spring 的机制是可能的,但我们现在没有使用太多来自 Spring 的内容(尽管我熟悉各种 Spring 框架)。
我知道 Eclipse @NonNull
注释,我可以将该注释添加到 getter 需要 return 非空值的方法。
我希望能够做的是 运行 请求对象上的一个可重用方法,它将确定是否存在任何约束违规和 return 一个人类可读的错误消息 (或其他东西)。
似乎有多种方法可以做到这一点,但我不确定哪种框架策略对我的情况有意义。例如,有 commons-validator
,但这似乎是特定于网页表单的。我还看到了一些关于 hibernate validator
的文档,但这似乎不适用于此处。
您可以使用 oracle Validation API JSR-303,它是独立的框架,可用于基于 Web 和 none 基于 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";
}
}