验证Spring控制器参数不为空

时间:2017-03-03 16:00:34

标签: java spring nullpointerexception controller

如果我有一个控制器,它将一个Integer作为参数,可以为null

someFunc(...,...
     @RequestParam(required=false) Integer integerObjThatCanBeNull,...){
     return anotherFunc(...,integerObjThatCanBeNull...);
}

然后将integerObjThatCanBeNull传递给anotherFunc

someFunc(..., int integerPrimitiveThatCanBeNull...){...

如果integerObjThatCanBeNull在最初传入时是否为null,我如何检查someFunc?

5 个答案:

答案 0 :(得分:2)

您可以将参数更改为Integer并执行简单的空检查。如果您的参数是int类型,则此处不会获得空值,而是先前的异常。实际上" int integerPrimitiveThatCanBeNull"这是一个非常有趣的宣言。

答案 1 :(得分:1)

您可以在返回前进行​​简单的空检查。 否则,如果您希望代码更清晰,则可以使用defaultValue,例如,如果整数为null,则强制它为0。 如果它不能为null,那么您可以将'require'更改为true。

你甚至可以这样做

@RequestParam(required=true, defaultValue=0)

答案 2 :(得分:1)

问题是因为您将原始请求中的整数解包为int中的someFunc,并且您无法对基元进行空检查。

这样做

someFunc(..., Integer integerPrimitiveThatCanBeNull)
if(integerPrimitiveThatCanBeNull== null)

注意

在原始代码中,当null从服务进入并传递给someFunc时,它会抛出NullPointerException,因为您正在尝试将空值放入{{1} }}。在提供的解决方案中,如果在执行if语句中的逻辑后没有返回,则可以获得int

答案 3 :(得分:0)

原始类型变量不能接收null值。如果未分配,则它们将假定为默认值(例如:0int,{{1}为{{ 1}},0.0f代表布尔值,等等。

如果需要在方法业务逻辑上将float的{​​{1}}参数表示为null,则该接口的设计不正确,您应该对其进行更改。使您的false保持int签名。

答案 4 :(得分:-1)

调用此函数时必须检查integerObjThatCanBeNull!= null

someFunc(..., int integerPrimitiveThatCanBeNull...){...