記錄後臺遇到的兩個小問題

weiewiyi發表於2022-05-24

specification查詢不起作用

寫後臺的時候需要加一個specification查詢,只返回屬於該社群的資料。
image.png

於是我增加了如圖紅框中的查詢,呼叫了and函式。

 specification.and(VehicleSpecs.belongToCommunity(district.getId()));

但是執行後發現,這條查詢沒有按照想法獲取到查詢到資料,相當於這條查詢並沒有作用

在打斷點之後,發現確實進入了查詢函式裡

測試了很多遍還是如此,這條查詢語句並沒有起作用。

後來查谷歌之後發現有人和我遇到同樣的問題。
解決方法很簡單:
讓specification等於and函式返回值

image.png

也就是這樣:

specification = specification.and(VehicleSpecs.belongToCommunity(district.getId()));

然後回過頭看and函式的宣告才發現:
返回的是一個Specification型別的資料。也就是說,我並沒有儲存這個資料,所以查詢失效了。
應該重新給本地變數賦值。這樣才能使查詢真正新增上去。
image.png


之後回過頭來想想,我沒有想到重新賦值的原因,可能是習慣了下圖中的方式,即呼叫了函式,就真正地把資料新增了進去,不用再去重新賦值。

image.png

總結

總結來說還是需要真正看函式的宣告,檢視它的返回值,以確定是否需要執行相關的操作。因為這個函式的用法和返回值都寫在了宣告中。

單元測試資料不一致

在單元測試中,第187行發生的錯誤。

MockMvc返回的值與期望的值不一致

image.png


但是去控制檯一看:值是相同的。期望值是0,實際值也是0。這就很奇怪了,期望值和實際值相同,為什麼兩者沒有通過判斷呢。
image.png

很容易聯絡到是型別出了問題。


測試發現,Long,Integer, String, 都通過了。 沒通過的是Short型別的資料,即紅框中的資料。

image.png

後來在後面加上 .toString()能正常通過。
image.png

這裡mvc的json型別的資料是string型別, 與short型別資料判斷的時候失敗了,可能是兩者不能正常識別。

相關文章