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

简介:

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

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

相关文章
|
消息中间件 SQL 存储
超详细的RabbitMQ入门,看这篇就够了!
RabbitMQ入门,看这篇就够了
219617 69
|
前端开发 网络协议 Dubbo
超详细Netty入门,看这篇就够了!
本文主要讲述Netty框架的一些特性以及重要组件,希望看完之后能对Netty框架有一个比较直观的感受,希望能帮助读者快速入门Netty,减少一些弯路。
93436 33
超详细Netty入门,看这篇就够了!
|
存储 缓存 安全
【面试题精讲】String 为什么是不可变的?
【面试题精讲】String 为什么是不可变的?
|
缓存 Java 应用服务中间件
一文带你使用xxl-job定时任务
将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求。 将任务抽象成分散的JobHandler,交由“执行器”统一管理,“执行器”负责接收调度请求并执行对应的JobHandler中业务逻辑。 因此,“调度”和“任务”两部分可以相互解耦,提高系统整体稳定性和扩展性;
4888 0
一文带你使用xxl-job定时任务
(详细图解过程) IDEA在创建类的的时候自动生成作者信息、时间等信息
这篇文章介绍了如何在IntelliJ IDEA中设置文件和代码模板,以便在创建新类时自动生成包含作者信息、日期和时间等信息的文件头。
(详细图解过程) IDEA在创建类的的时候自动生成作者信息、时间等信息
|
消息中间件 JSON Java
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
29087 0
|
Java 数据库连接 mybatis
成功解决: Invalid bound statement (not found) 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决
这篇文章讨论了在已使用MyBatis的项目中引入MyBatis-Plus后出现的"Invalid bound statement (not found)"错误,并提供了解决方法,主要是通过修改yml配置文件来解决MyBatis和MyBatis-Plus共存时的冲突问题。
成功解决: Invalid bound statement (not found) 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决
|
SQL XML Java
【MyBatis】 MyBatis与MyBatis-Plus的区别
【MyBatis】 MyBatis与MyBatis-Plus的区别
7354 0
【MyBatis】 MyBatis与MyBatis-Plus的区别
|
网络协议 数据库连接 数据库
长连接与短连接的区别以及使用场景
这篇文章讨论了长连接与短连接的区别、各自的优缺点以及使用场景,指出短连接适用于浏览器访问服务器等场景,而长连接适用于操作频繁且连接数不多的情况,如数据库连接,选择长连接或短连接应根据实际需求和网络环境来决定。
长连接与短连接的区别以及使用场景