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;
    }
}
相关推荐
青春不流名2 小时前
Java List初始化的例子
java·windows·list
人工智能训练2 小时前
Windows系统Docker中Xinference 集群无法启动的解决方法
linux·运维·服务器·windows·docker·容器·xinference
程序员霸哥哥2 小时前
XYplorer(多标签文件管理器) v27.20.0700 / 28.00.1200 多语便携版
windows·macos·软件工程·mac·应用软件·xyplorer
公子小六3 小时前
推荐一种手动设置异步线程等待机制的解决方案
windows·microsoft·c#·.net
托斯沃尔3 小时前
为什么Microsoft Store(微软应用商店)下载速度特别慢?
windows·microsoft
Blue桃之夭夭3 小时前
【超详细教程】手把手教你从微软官网免费下载Windows 10官方原版ISO镜像(2025最新版)
windows·microsoft
2***65633 小时前
windows下安装并使用node.js
windows·node.js
v***91303 小时前
Windows版Redis本地后台启动
数据库·windows·redis
至此流年莫相忘4 小时前
第二版:Windows 服务器上私有化部署 Qwen/Qwen3-Embedding-0.6B 模型
服务器·windows·embedding