2017-03-03 56 views
3

如果我有一個控制器,它接受一個整數如,可以是null作爲這樣驗證是否彈簧控制器參數不爲空

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

一個參數,然後傳遞integerObjThatCanBeNull到anotherFunc這樣

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

最初傳入時,如果integerObjThatCanBeNull爲null或不是,我該如何檢查someFunc?

+0

你不能做一個簡單的if(integerPrimitiveThatCanBeNull == null)? –

+0

「運算符==未定義爲參數類型int,null」 是我在嘗試此操作時收到的錯誤 –

回答

1

的問題是,因爲你是在拆箱您的原始請求的整數到intsomeFunc,你不能做一個原始的空校驗。

做到這一點

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

注意

在原代碼,當null從服務進來,傳遞給someFunc,它會拋出NullPointerException因爲你試圖Autobox空價值分成int。在提供的解決方案中,如果在執行if語句中的邏輯後沒有返回,則可以獲得NullPointerException

+0

是唯一的選擇嗎?我不想通過將類型更改爲Integer –

+1

來破壞其他代碼。相反,您通過在此處添加對空值的檢查來修復潛在的空指針。將null自動裝箱到int將破壞呼叫。 – rob

+0

@rob,但這不是他們面臨的同一個問題,因爲他們在服務中獲得Integer,然後將Autoboxing插入到方法中?我解釋過這樣做,因爲他似乎無法在someFunc之外執行檢查。但是,你是正確的null的自動裝箱會導致問題。我會補充說明。 –

2

您可以將您的參數更改爲Integer並執行簡單的空檢查。如果你的參數是int類型的,那麼你不會在這裏得到一個空值,而是一個例外。實際上「int integerPrimitiveThatCanBeNull」是一個相當有趣的聲明。

-1

必須檢查integerObjThatCanBeNull!= null當你調用這個函數

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

這不起作用,因爲您無法檢查原始對象 –

+0

@EduardoDennis:看起來他是在說在調用'anotherFunc'之前檢查它。第一個函數需要一個'Integer',所以有一個空檢查的機會。 –

1

您可以返回前一個簡單的空檢查。 否則,如果您希望自己的代碼更清潔,則可以使用defaultValue,例如,如果整數爲null,則強制爲0。 如果它不能爲空,那麼你可以將'require'改爲true。

你甚至可以兩者都做這樣的

@RequestParam(required=true, defaultValue=0) 
+0

不會工作,在方法someFunc他wouldnt能夠確定用戶發送0或它是默認的。 –

+0

這就是爲什麼我說他可以進行空檢查或將其設置爲0作爲默認值。如果在他的情況下,他意識到0不能被用戶選擇,那麼他就會知道出了什麼問題......只是展示了@ RequestParam的功能:) – OEH