我在Java中实现了一个API网关,其中请求对象有很多字段和子对象。有许多属性required
(不应该为空),有些属性是可选的。
代码在Karaf中运行并且正在使用Blueprint,所以一些基于Spring的机制是可能的,但我们现在没有使用Spring(虽然我熟悉各种Spring框架)。
我知道Eclipse @NonNull
注释,我可以将该注释添加到需要返回非空值的getter方法。
我希望能够做的是在请求对象上运行可重用的方法,该方法将确定是否存在任何约束违规并返回人类可读的错误消息(或其他内容)。
似乎有各种方法可以做到这一点,但我不确定在我的情况下哪种框架策略有意义。例如,有commons-validator
,但这似乎是网页表单特有的。我还看到了hibernate validator
的一些文档,但这似乎不适用于此。
答案 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";
}
}