错误锦囊-复盘Java后端开发过程的常见的错误
日常开发过程中,大大小小会遇到许许多多的错误。
-
对于Java,最基础当然是
NullException错误。当引入比较庞大的后端框架,错误也变得难以寻找。 -
对于前后端交互,有些细节就比较隐晦。如简单的64位Long类型,Java是支持的,Json也是支持的,但是前端Js对这些数据接受会丢失3位精度(将最后3位变为0)
这个错误是Postman接口测试工具调试不出来的。
Error creating bean with name 'xx'
@Value一定要提供缺省值,不然找不到配置就会报以上错误:
fastjson错误-日期只传"yyyy-MM"缺少dd的错误
下面演示一个正确的方法与一个错误的方法。
@Data
public static class AreaShopPlanDto {
private Date planTime;
private String planContent;
}
@Test
public void tSuc() {
String json = "{\n" +
" \"planTime\": \"2025-01-01\",\n" +
" \"planContent\": \"planContent_887e38f96bf4\"\n" +
"}";
AreaShopPlanDto areaShopPlanDto = JSONObject.parseObject(json, AreaShopPlanDto.class);
System.out.println(areaShopPlanDto);
}
@Test
public void tError() {
String json = "{\n" +
" \"planTime\": \"2025-01\",\n" +
" \"planContent\": \"planContent_887e38f96bf4\"\n" +
"}";
AreaShopPlanDto areaShopPlanDto = JSONObject.parseObject(json, AreaShopPlanDto.class);
System.out.println(areaShopPlanDto);
}
错误方法报错:
这个错误说实话不好处理o(╥﹏╥)o,想出的方案有:
- 1.写个解析器。解析器考虑的事情就多了。
从"解析器String转Date" 这一层面来解决。
- 2.修改所有用到这个传参类的所有地方,以String接受,然后手动转换成Date。
还可以AOP层面解决这个问题,给字段加上@自定义注解,然后在Spring AOP获取到请求参数加上注解的这个日期String,拼接上"日”
- 最后协商的方案是:前端多传个“日”,哪怕这个“日”是实际业务用不到的。([doge] 这样设计莫名也合理起来,因为不管MySQL数据库类型还是Java日期类型都不会单独存储"年月"的!主要是我偷懒了嘿嘿嘿~)
业务逻辑错误
SQL Update修改只发生更新的字段
阿里规范明确的,数据库更新应该只更新引起发送修改的字段。MyBatis 3 使用的updateById 就是会根据实体类不为null的参数进行对应字段的修改。
实际上,会遇到的问题会有:
- 为了方便,前端可能会传一整个对象过来,而不是只发生修改的字段。
这样后端一一比对参数,把参数一模一样的值置空?赶紧不是很有必要!
- Null值问题,如果我希望将原来不为null的字段改为null,想一下,这时候是不是就修改不成功,保留原始值了?
方案是用一个默认值代替null,如int类型默认值为0,表示null。
PS:Null值修改问题确确实实是我开发过程中出现的比较隐晦的逻辑错误,前端同事刚开始跟我反应这个问题我都完全没有反应过来。
最后的说明
这个错误之后也会一直更新下去~
如果评论区的兄弟姐妹们有什么看法或者思考欢迎补充~
如果对你有帮助,点个赞谢谢~