在你不知道的情况下,前端传给后端的数据会有一些变化。
如果在 idea 中使用了“阿里编码规约”的插件,那么插件中会有如下提示信息。
关于基本数据类型与包装数据类型的使用标准如下:
1) 所有的POJO类属性必须使用包装数据类型。
2) RPC方法的返回值和参数必须使用包装数据类型。
3) 所有的局部变量推荐使用基本数据类型。
说明:POJO类属性没有初值是提醒使用者在需要使用时,必须自己显式地进行赋值,任何NPE问题,或者入库检查,都由使用者来保证。
以下是实际使用中会出现的情况
开发环境:
- Postman
- IDEA
以下用 POJO 中属性 id 举例
- 当 ID 为 int 时,如下:
/**
* 用户实体
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class UserDTO extends Page {
/**
* 用户ID
*/
private int id;
......
}
- 当 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 的出现。