记录一次-hutool json包替换fastjson包问题

之前项目中,大部分代码都是使用的fastjson,由于上级领导说fastjson包不再更新维护,决定换成hutool json。其中遇到了hutool json JsonNull相关问题,故做此记录。

问题一:hutool json中null值存储是使用的JSONNull
所以在做对象转换时,如有字段为null则会报错

JSONObject json= (JSONObject) record;
Map<String, Object> dataItem = json.toBean(Map.class);
String signTime = (String) dataItem.get("signTime");

上面代码,当字段signTime字段为null时,第三段代码则会报类型转换错误 (JSONNull转String)
解决办法:
1.不进行强制类型转换
2.用json进行取数

除了做对象转换时会有问题,在进行接口请求或序列化时也会有
No serializer found for class cn.hutool.json.JSONNull and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
JSONNull序列化问题

这是由于:
Jsckson是SpringBoot内置的一个json和xml的框架,如果在springboot项目中rest接口返回的结果是自定义对象,则默认会使用Jackson的序列化工具将对象序列化为Json再返回。
Hutool的Json里用JSONNull对象代替了null,而且JSONNull类没有适用于Jackson序列化的序列化器,此时如果接口返回值对象里使用了Hutool的Json,又凑巧存在被JSONNull对象代替了的null值,则返回序列化值时会出现以上的异常

解决办法:
1.自定义序列化器

package com.hm.base.openapi.common.config;

import cn.hutool.json.JSONNull;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.springframework.boot.jackson.JsonComponent;

import java.io.IOException;
import java.util.Map;

/**
 * @author: kary.zhang
 * @create: 2024-02-02 11:41
 * @Description:
 */
@JsonComponent
public class JsonNullSerializer extends JsonSerializer<JSONNull> {
    @Override
    public void serialize(JSONNull jsonNull, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeNull();
    }

2.更换json工具

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值