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

简介:

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

如果在 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 的出现。

相关文章
|
1月前
|
存储 Java 数据库
java包装类的作用、基本类型和包装类型的区别
java包装类的作用、基本类型和包装类型的区别
31 0
java包装类的作用、基本类型和包装类型的区别
|
4月前
|
存储 测试技术 C++
03 # 类型基础:动态类型与静态类型
03 # 类型基础:动态类型与静态类型
25 0
|
4月前
转成String类型的几种方式
转成String类型的几种方式
45 0
|
7月前
5.3.2.2 操作字符串类型数据
5.3.2.2 操作字符串类型数据
30 0
|
存储 缓存 安全
实战小技巧15:如何判断类为基础类型or基础类型的包装类
判断一个类是否为基础类型属于常规操作了,一般我们遇到这种case,要怎么处理呢? 一个一个的if/else判断? 还是其他的操作姿势?
867 0
|
存储 C#
C# 值类型与引用类型 null与可空类型
本文目录 1. 值类型与引用类型 2. null的含义 3. 可空类型
160 0
|
C#
面试3 不用系统自带的方法将字符串类型123456转换为值类型
C# 不用系统自带的方法将字符串类型123456转换为值类型 static void Main(string[] args) { string numString = "123045"; long num = GetNum(numString); Console.
734 0
|
存储
String类型
1.用字符数组存储 private final char value[]; 2.自带比较功能 String implements java.io.Serializable, Comparable, CharSequence
819 0
|
存储 数据库
值转换为可空类型
int? 这种类型实际上是Nullable类型的实例,这里不过多介绍Nullable,只说明一点它在int的基础上可存储了null值,有时候在数据库操作时,我们会创建一个用于封装所需参数的类Model,若数据库中某个Int类型的字段可为空,为了保证与数据库同步,我们会在Model里给该字段定义为int?类型,但在查询取出来的时候就出现问题了,如果数据库中是空,reader["xxx"] 返回的是object类型,而我们要转为int类型只能Convert.ToInt32(reader["xxx"]); 但这时候reader["xxx"]的值为{} Dbnull.Value 空的意思。
1108 0