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

简介:

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

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

相关文章
|
6月前
|
存储 Java 数据库
java包装类的作用、基本类型和包装类型的区别
java包装类的作用、基本类型和包装类型的区别
97 0
java包装类的作用、基本类型和包装类型的区别
|
2月前
|
存储 缓存 Java
包装类型16
包装类型16
34 3
|
2月前
|
存储 JavaScript Java
静态整型和静态字符串类型
静态整型和静态字符串类型
27 0
|
6月前
|
缓存
Long包装类型的享元模式注意事项
昨天修复订单接口的bug
55 0
|
11月前
转成String类型的几种方式
转成String类型的几种方式
105 0
|
存储 Java
基本类型、包装类型、引用类型、String等作为实参传递后值会不会改变?
基本类型、包装类型、String类型作为参数传递之后,在方法里面修改他们的值,原值不会改变!引用类型不一定,要看是怎么修改它的。
114 0
5.3.2.2 操作字符串类型数据
5.3.2.2 操作字符串类型数据
59 0
实战小技巧15:如何判断类为基础类型or基础类型的包装类
判断一个类是否为基础类型属于常规操作了,一般我们遇到这种case,要怎么处理呢? 一个一个的if/else判断? 还是其他的操作姿势?
968 0
|
Java
数据类型的封装类
数据类型的封装类
109 0
|
C#
面试3 不用系统自带的方法将字符串类型123456转换为值类型
C# 不用系统自带的方法将字符串类型123456转换为值类型 static void Main(string[] args) { string numString = "123045"; long num = GetNum(numString); Console.
764 0