Hutool解析Json,遇到LocalDateTime时解析错误的情况

public static void main(String[] args) {

        TestDate testDate = new TestDate();
        testDate.setTime(LocalDateTime.of(1970,1,2,8,0,1));
        String s = JSONUtil.toJsonStr(testDate);
        System.out.println("s="+s);
        TestDate testDate1 = JSONUtil.toBean(s, TestDate.class);
        System.out.println(testDate1);

    }
s={"time":86401000}
TestDate{time=8640-09-30T00:00}

用JSONUtil.toJsonStr()把Bean转成Json字符串后,再用JSONUtil.toBean()把带时间戳的json字符串转换成Bean时,如果时间戳小于等于2147483647(即Integer最大值),转换就会出错。查询源码后发现了原因。

LocalDateTime类型使用TemporalAccessorConverter转换器。只有当时间戳大于2147483647(即为Long类型),才会把value当成时间戳,否则会转成字符串。若value是八位数的则当成YYYYMMDD格式转换,所以有上面的结果。

 解决方法:

  1. 使用JSONConfig设置dateFormat指定格式
  2. 更新到最新版本
public static void main(String[] args) {

        TestDate testDate = new TestDate();
        testDate.setTime(LocalDateTime.of(1970,1,2,8,0,1));
        JSONConfig jsonConfig = JSONConfig.create().setDateFormat("yyyy-MM-dd HH:mm:ss");
        JSONObject object = new JSONObject(testDate, jsonConfig);
        String s = JSONUtil.toJsonStr(object);
        System.out.println(s);
        JSONObject object1 = new JSONObject(s, jsonConfig);
        TestDate testDate1 = JSONUtil.toBean(object1, TestDate.class);
        System.out.println(testDate1);

    }
{"time":"1970-01-02 08:00:01"}
TestDate{time=1970-01-02T08:00:01}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hutool是一个Java工具库,其中包含了许多方便实用的工具类。Hutool中的hutool-json模块提供了对JSON数据的解析和操作功能。通过使用hutool-json,你可以方便地将JSON字符串转换为Java对象,或者从Java对象中提取JSON属性。 在使用hutool-json解析JSON,你需要先引入hutool-json的依赖。可以在项目的pom.xml文件中添加以下依赖配置: ``` <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-json</artifactId> <version>5.8.10</version> </dependency> ``` 引用\[3\] 接下来,你可以使用hutool-json提供的JSONObject类来解析JSON。你可以通过以下步骤来解析JSON字符串: 1. 导入需要的类:`import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil;` 2. 创建一个JSONObject对象并将JSON字符串传入:`JSONObject jsonObject = JSONUtil.parseObj(jsonString);` 3. 使用JSONObject对象提供的方法来获取JSON属性的值:`String value = jsonObject.getStr("propertyName");` 例如,如果你有一个JSON字符串`{"name":"Tom","age":23}`,你可以使用hutool-json解析它: ``` JSONObject jsonObject = JSONUtil.parseObj(jsonString); String name = jsonObject.getStr("name"); int age = jsonObject.getInt("age"); System.out.println(name); // 输出结果为:Tom System.out.println(age); // 输出结果为:23 ``` 引用\[2\] 通过以上步骤,你可以使用hutool-json轻松地解析JSON数据并获取其中的属性值。 #### 引用[.reference_title] - *1* *3* [JavaHutool工具箱之hutool-jsonJSON数据读取转换处理](https://blog.csdn.net/mouday/article/details/128085029)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [使用hutool工具http请求并且解析json](https://blog.csdn.net/weixin_49390750/article/details/125026332)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值