天天看點

在傳輸對象中,屬性使用包裝類型還是基礎類型?

在你不知道的情況下,前端傳給後端的資料會有一些變化。

如果在 idea 中使用了“阿裡編碼規約”的插件,那麼插件中會有如下提示資訊。

關于基本資料類型與包裝資料類型的使用标準如下:

1) 所有的POJO類屬性必須使用包裝資料類型。

2) RPC方法的傳回值和參數必須使用包裝資料類型。

3) 所有的局部變量推薦使用基本資料類型。

說明:POJO類屬性沒有初值是提醒使用者在需要使用時,必須自己顯式地進行指派,任何NPE問題,或者入庫檢查,都由使用者來保證。

以下是實際使用中會出現的情況

開發環境:

  1. Postman
  2. IDEA

以下用 POJO 中屬性 id 舉例

  1. 當 ID 為 int 時,如下:
/**
 * 使用者實體
 */
@EqualsAndHashCode(callSuper = true)
@Data
public class UserDTO extends Page {
    /**
     * 使用者ID
     */
    private int id;
    ......
}           
  1. 當 ID 為 Integer 時
/**
 * 使用者實體
 */
@EqualsAndHashCode(callSuper = true)
@Data
public class UserDTO extends Page {
    /**
     * 使用者ID
     */
    private Integer id;
    ......
}           

3.postman 傳輸資料的方式為以下幾種

1)不傳id的情況:

{
    "size": 2,
    "current": 1
}           

2)id 為 null 的情況:

{
    "size": 2,
    "current": 1,
    "id": null
}           

3)id 為空字元串的情況:

{
    "size": 2,
    "current": 1,
    "id": ""
}           

4)id 為 0 的情況:

{
    "size": 2,
    "current": 1,
    "id": 0
}           

以下是前端将 id 的值傳至後端時,後端擷取 id 值對照表

傳輸值 int Integer
不傳 null
""

其他基礎類型和包裝類基本類似,比如 double 與 Double 的對照表如下:

double Double
0.0

從實際使用情況可以看出,目前端不傳值時,或者傳 null時,或者傳空字元串("")時,基礎類型都會有值,這可能在後續開發的業務邏輯中會有幹擾,同時也容易有異常出現。特别是在需要計算數值的時候,更容易出現業務邏輯的問題。

是以,如規範中所說,POJO類屬性最好使用包裝資料類型,可以減少開發過程中異常情況的出現,也可以防止 BUG 的出現。