You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot使用Jackson序列化POJO输出JSON时去除键名与冒号间空格

解决方案

不需要编写自定义序列化器,你遇到的格式问题是Jackson默认pretty printer的默认分隔符规则导致的,Jackson本身提供了原生配置可以直接修改键值分隔符样式,几行代码就能实现需求,不需要改动现有POJO结构。


具体实现步骤

你当前直接调用writerWithDefaultPrettyPrinter()使用的是Jackson内置的默认格式化规则,该规则默认给对象字段名和冒号之间加了1个空格,只要自定义分隔符配置,把对象字段和值之间的分隔符从默认的:(键名后、冒号前带空格)改成: (键名直接接冒号,冒号后保留1个空格)即可。

SpringBoot默认集成的Jackson版本(2.9及以上)都支持这个配置,不需要引入额外依赖,修改后的方法代码如下:

import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
import com.fasterxml.jackson.core.util.Separators;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.nio.file.Paths;

public class GoogleJSONAuthWriter {

    public void writeGoogleAuthPropertiesToJSON(GoogleAuthProperties googleAuthProperties) throws IOException {
        ObjectMapper mapper = new ObjectMapper();

        // 自定义JSON格式化规则
        DefaultPrettyPrinter customPrettyPrinter = new DefaultPrettyPrinter();
        // 配置键值分隔符:键名后直接拼接冒号,冒号与值之间保留单个空格
        Separators separators = Separators.createDefaultInstance()
                .withObjectFieldValueSeparator(": ");
        customPrettyPrinter.withSeparators(separators);

        // 用自定义格式化器输出JSON文件
        mapper.writer(customPrettyPrinter)
                .writeValue(Paths.get("key.json").toFile(), googleAuthProperties);
    }
}

效果说明

  • 输出的JSON完全匹配你需要的格式,嵌套对象、数组的缩进规则和之前默认格式化的效果完全一致,仅调整了冒号前后的空格
  • 不需要修改GoogleAuthProperties类的任何字段、注解,原有序列化逻辑完全兼容
  • 如果你需要全局复用这个格式规则,可以把自定义的customPrettyPrinter设置为ObjectMapper的默认prettyPrinter,后续所有格式化输出都会自动应用这个规则:
    mapper.setDefaultPrettyPrinter(customPrettyPrinter);
    // 之后直接调用writerWithDefaultPrettyPrinter()就会用自定义规则
    mapper.writerWithDefaultPrettyPrinter().writeValue(/* 输出路径 */, googleAuthProperties);
    

内容的提问来源于stack exchange,提问作者I2obiN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 18:48:54