jackson 控制处理

复制代码
jackson:
  default-property-inclusion: always   # 确保 null 会走到序列化器
  serialization:
    write-null-map-values: true
java 复制代码
package com.idsoftwhl.biz.init;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
import com.fasterxml.jackson.databind.ser.BeanSerializerModifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.io.IOException;
import java.util.List;

@Configuration
public class JacksonConfig {
    public JacksonConfig() {
        System.out.println(">>>>>>>>>> JacksonPatch loaded <<<<<<<<<<");
    }

    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper om = new ObjectMapper();
        om.setSerializationInclusion(JsonInclude.Include.ALWAYS);   // 让 null 也参与序列化

        // 1. 非集合 -> ""
        JsonSerializer<Object> nullToEmptyString = new JsonSerializer<Object>() {
            @Override
            public void serialize(Object value, JsonGenerator g,
                                  SerializerProvider provider) throws IOException {
                g.writeString("");
            }
        };

        // 2. 集合 -> []
        JsonSerializer<Object> nullToEmptyArray = new JsonSerializer<Object>() {
            @Override
            public void serialize(Object value, JsonGenerator g,
                                  SerializerProvider provider) throws IOException {
                g.writeStartArray();
                g.writeEndArray();
            }
        };

        // 3. 注册 Modifier
        om.setSerializerFactory(
                om.getSerializerFactory()
                        .withSerializerModifier(new BeanSerializerModifier() {
                            @Override
                            public List<BeanPropertyWriter> changeProperties(SerializationConfig config,
                                                                             BeanDescription beanDesc,
                                                                             List<BeanPropertyWriter> writers) {
                                for (BeanPropertyWriter w : writers) {
                                    if (w.getType().isCollectionLikeType() || w.getType().isArrayType()) {
                                        w.assignNullSerializer(nullToEmptyArray);
                                    } else {
                                        w.assignNullSerializer(nullToEmptyString);
                                    }
                                }
                                return writers;
                            }
                        })
        );
        return om;
    }
}
相关推荐
斯密码赛我是美女22 分钟前
周报(欢乐赛+信息搜集ctfshow+Trae-mcp)
网络·windows
米饭不加菜1 小时前
Windows 键盘快捷方式总览
windows·计算机外设
小小小米粒1 小时前
观察者模式
windows
lucky_syq1 小时前
Windows电脑部署OpenClaw保姆级教程(2026最新版)
人工智能·windows·开源·电脑·openclaw
无巧不成书02182 小时前
FFmpeg 保姆级安装教程!Windows/macOS/Linux全平台覆盖,
windows·macos·ffmpeg
Yu_摆摆2 小时前
windows部署prometheus+windows_exporter+grafana+alertmanager实现监控CPU、内存、磁盘并邮件告警
windows·grafana·prometheus
笑鸿的学习笔记2 小时前
Windows笔记之windows11和windows10启动速度优化
windows·笔记
zhangfeng113311 小时前
Windows 的 Git Bash 中使用 md5sum 命令非常简单 md5做文件完整性检测 WinRAR 可以计算文件的 MD5 值
人工智能·windows·git·bash
彭波39613 小时前
.NET Framework 3.5问题修复教程!可以离线修复
windows·安全·电脑·.net·开源软件
love530love14 小时前
OpenClaw 手机直连配置全流程
人工智能·windows·python·智能手机·c#·agent·openclaw