在传输对象中,属性使用包装类型还是基础类型?

在你不知道的情况下,前端传给后端的数据会有一些变化。

如果在 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
不传 0 null
null 0 null
"" 0 null
0 0 0

其他基础类型和包装类基本类似,比如 double 与 Double 的对照表如下:

传输值 double Double
不传 0.0 null
null 0.0 null
"" 0.0 null
0 0.0 0.0

从实际使用情况可以看出,当前端不传值时,或者传 null时,或者传空字符串("")时,基础类型都会有值,这可能在后续开发的业务逻辑中会有干扰,同时也容易有异常出现。特别是在需要计算数值的时候,更容易出现业务逻辑的问题。

所以,如规范中所说,POJO类属性最好使用包装数据类型,可以减少开发过程中异常情况的出现,也可以防止 BUG 的出现。

上一篇:关于内存泄漏检测问题,和大家一起分享


下一篇:《JavaScript框架设计》——2.2 加载器所在路径的探知