2017-05-30 456 views
0

我正在Java中实现一个API网关,其中请求对象包含大量字段和子对象。有许多属性是required(不应该为空),有些是可选的。代码在Karaf中运行,并且正在使用蓝图,所以一些基于Spring的机制是可能的,但我们现在并没有从Spring中使用太多(尽管我熟悉各种Spring框架)。在Java中,使用@NonNull注释属性验证对象的最佳方法

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

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

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

+0

注释的控制器的方法,用'Objects.requireNonNull()一起'为每一个参数方法。如果不满足前提条件,将会以NPE的速度快速失败。 –

+0

对不起,我需要更多信息。 –

+0

你能分享一些示例代码吗? –

回答

1

你可以使用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> 

,并在你bean对象实施

<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> 

你可以使用注解像@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"; 
     } 
    } 
+0

我没有使用弹簧请求处理,但大部分仍然适用。 –