使用@NonNull检查类成员

时间:2015-06-10 10:49:45

标签: java spring null java-8 lombok

假设我有一个有3个成员的班级:

Class A {
    private String string1; /** Cannot be null */
    private String string2; /** Cannot be null */
    private String string3; /** Can be null */
}

我有2个方法接受这个类的对象作为参数。其中一种方法需要检查非可空字段是否存在,而在另一种方法中,无关紧要:

public int func1(A object); /** Check non nullable fields */
public int func2(A object); /** No check required */

有没有干净的方法呢?使用@NonNull注释还是什么?

我尝试了各种各样的方法,但没有一种方法可行。所有NonNull仅帮助确保setter不会将null作为参数。或者对象本身不为空。

我似乎找不到对这个对象进行这种递归空值检查的东西。

如果有人能提供帮助,那就太棒了。 :)

3 个答案:

答案 0 :(得分:2)

你需要一个bean Validator,一个用来检查bean是否正常的类。在Spring中有许多实现。例如,请参阅SmartValidatorLocalValidatorFactoryBean

@valid注释是自动调用验证器的好方法。在使用Spring时,您可以避免手动创建验证器。它只适用于Spring(或任何等效容器)调用该方法的情况。您可以在BindingResult对象中获得验证结果。例如:

@RequestMapping(value = "/MyPath", method = RequestMethod.POST)
public String postCostForm(Model model, @Valid MyForm myForm, BindingResult result){                        
        if(result.hasErrors()){             
            for(ObjectError error : result.getAllErrors()){
                  // Do something
            }                               
            return "/error";
        }else{
            return "/success";
        }
}

验证非常强大,有时甚至很复杂。您可以创建验证组并仅检查其中一组。您可以创建自定义约束标记,可以调用验证方法,并且可以在验证失败时自定义和国际化返回的消息。

答案 1 :(得分:1)

class A {
    @NotNull
    private String string1; /** Cannot be null */
    @NotNull
    private String string2; /** Cannot be null */
    private String string3; /** Can be null */
}

在方法签名中有@Valid

public int function(@Valid A object)

答案 2 :(得分:0)

@Required

中使用Spring's注释
private String string1;

@Required
public void setString1(String string1) {
  this.string1= string1;
}