Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 也使用@NonNull检查类成员_Java_Spring_Null_Java 8_Lombok - Fatal编程技术网

Java 也使用@NonNull检查类成员

Java 也使用@NonNull检查类成员,java,spring,null,java-8,lombok,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 */ } 我有两个方法,它接受这个类的一个对象作为参数。其中一种方法需要检查不可为null的字段是否存在,而在另一种方法中,这并不重要: public int

假设我有一个有3个成员的类:

Class A {
    private String string1; /** Cannot be null */
    private String string2; /** Cannot be null */
    private String string3; /** Can be null */
}
我有两个方法,它接受这个类的一个对象作为参数。其中一种方法需要检查不可为null的字段是否存在,而在另一种方法中,这并不重要:

public int func1(A object); /** Check non nullable fields */
public int func2(A object); /** No check required */
有什么干净的方法吗?使用@NonNull注释还是什么

我试过各种方法,但都不管用。所有的非空值仅帮助确保setter不会将null作为参数。或者对象本身不是空的

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


如果你们中有人能帮忙,那就太好了。:)

Spring的

private String string1;

@Required
public void setString1(String string1) {
  this.string1= string1;
}
并且在方法签名中有
@有效

public int function(@Valid A object)
您需要一个bean,一个用于检查bean是否正常的类。在春季,有许多实现。例如,请参见和

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

@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";
        }
}

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

在使用该方法时,每次调用该方法时,它都会检查是否存在所有字段?不是所有字段,只是添加所需注释的特定字段。这需要hibernate validator,否?如果您确保
A
是不可变的,
string1
string2
上的
@NonNull
应该足够了。这听起来像是Spring的经典案例AOP@Valid是哪个图书馆的一部分?Java8还是Spring?似乎无法在eclipse.javax.validation中导入它,因为我正在使用JDK8。找不到javax.validation。我认为它在这个版本中被删除了。它不是JDK的一部分。它在Hibernate Validator或任何其他验证实现中。我正在使用javax.validation中的这个,但它不起作用。我正在寻找替代方法。显式定义验证器是一个选项,但我不想使用它。好的。我改进了答案以防有用
@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";
        }
}