当前位置: 首页 > article >正文

工具模块新增JSON格式化打印工具类

文章目录

    • 1.增加原因
    • 2.common-tool-starter
        • 1.目录结构
        • 2.JsonUtil.java json工具类
        • 3.ToolAutoConfiguration.java 自动配置
        • 4.spring.factories
    • 3.common-tool-starter-demo
        • 1.目录结构
        • 2.pom.xml 引入依赖
        • 3.application.yml 配置日志
        • 4.ToolController.java 测试案例
        • 5.ToolApplication.java 启动类
        • 6.测试

1.增加原因

由于有的时候需要日志打印json,但是如果不格式化输出,json数据很难看,所以就使用这种方式进行json的格式化输出

2.common-tool-starter

1.目录结构

CleanShot 2025-01-24 at 19.22.58@2x

2.JsonUtil.java json工具类
package cn.sunxiansheng.tool.utils;

import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;

/**
 * Description: Json工具类
 *
 * @Author sun
 * @Create 2025/1/24 18:48
 * @Version 1.0
 */
public class JsonUtil {

    private final Gson loggingGson;

    // ANSI 颜色代码 - 绿色
    private static final String ANSI_GREEN = "\u001B[32m";
    private static final String ANSI_RESET = "\u001B[0m";

    // 使用 Spring 注入 loggingGson
    public JsonUtil(Gson loggingGson) {
        this.loggingGson = loggingGson;
    }

    /**
     * 格式化打印对象
     *
     * @param object 任意对象
     * @return 格式化后的 JSON 字符串(绿色输出)
     */
    public String toPrettyJson(Object object) {
        if (object == null) {
            return ANSI_GREEN + "null" + ANSI_RESET;
        }
        try {
            return "\n" + ANSI_GREEN + loggingGson.toJson(object) + ANSI_RESET;
        } catch (Exception e) {
            return ANSI_GREEN + "无法格式化对象为 JSON: " + e.getMessage() + ANSI_RESET;
        }
    }

    /**
     * 格式化打印 JSON 字符串
     *
     * @param jsonString 原始 JSON 字符串
     * @return 格式化后的 JSON 字符串(绿色输出)
     */
    public String toPrettyJson(String jsonString) {
        if (jsonString == null || jsonString.trim().isEmpty()) {
            return ANSI_GREEN + "空的 JSON 字符串" + ANSI_RESET;
        }
        try {
            JsonElement jsonElement = JsonParser.parseString(jsonString);
            return "\n" + ANSI_GREEN + loggingGson.toJson(jsonElement) + ANSI_RESET;
        } catch (Exception e) {
            return ANSI_GREEN + "无法解析并格式化 JSON 字符串: " + e.getMessage() + ANSI_RESET;
        }
    }
}
3.ToolAutoConfiguration.java 自动配置
package cn.sunxiansheng.tool.config;

import cn.sunxiansheng.tool.utils.JsonUtil;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.annotation.PostConstruct;

/**
 * Description: ToolAutoConfiguration的自动配置类
 *
 * @Author sunxiansheng
 * @Create 2025/01/24 18:49
 * @Version 1.0
 */
@Configuration
@Slf4j
public class ToolAutoConfiguration {

    /**
     * 自动配置成功日志
     */
    @PostConstruct
    public void logConfigSuccess() {
        log.info("ToolAutoConfiguration has been loaded successfully!");
    }

    /**
     * 配置日志用的 Gson Bean
     *
     * @return 格式化的 Gson 对象
     */
    @Bean(name = "loggingGson")
    public Gson loggingGson() {
        return new GsonBuilder()
                .setPrettyPrinting() // 启用格式化输出
                .disableHtmlEscaping() // 禁用 HTML 转义
                .create();
    }

    /**
     * 注入json工具类
     *
     * @return
     */
    @Bean
    public JsonUtil jsonUtil() {
        return new JsonUtil(loggingGson());
    }
}
4.spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.sunxiansheng.tool.config.ToolAutoConfiguration

3.common-tool-starter-demo

1.目录结构

CleanShot 2025-01-24 at 19.26.02@2x

2.pom.xml 引入依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>cn.sunxiansheng</groupId>
        <artifactId>sunrays-common-demo</artifactId>
        <version>1.0.0</version>
    </parent>

    <artifactId>common-tool-starter-demo</artifactId>

    <dependencies>
        <!-- common-tool-starter -->
        <dependency>
            <groupId>cn.sunxiansheng</groupId>
            <artifactId>common-tool-starter</artifactId>
            <version>1.0.0</version>
        </dependency>

        <!-- 测试用的Web模块 -->
        <dependency>
            <groupId>cn.sunxiansheng</groupId>
            <artifactId>common-web-starter</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>
</project>
3.application.yml 配置日志
sun-rays:
  log4j2:
    home: /Users/sunxiansheng/IdeaProjects/sunrays-framework/sunrays-common-demo/common-tool-starter-demo/logs # 日志根目录(默认./logs)
4.ToolController.java 测试案例
package cn.sunxiansheng.tool.controller;

import cn.sunxiansheng.tool.utils.JsonUtil;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * Description: ToolController
 *
 * @Author sun
 * @Create 2025/1/24 19:02
 * @Version 1.0
 */
@RestController
@Slf4j
public class ToolController {

    @Resource
    private JsonUtil jsonUtil;

    /**
     * A test endpoint.
     *
     * @return A sample response.
     */
    @RequestMapping("/test")
    public String test() {
        return "This is a test response from ToolController";
    }

    @Data
    public static class JsonObject {
        private String name;
        private int age;
    }

    /**
     * 将对象进行json格式化打印
     *
     * @param jsonObject
     */
    @RequestMapping("/objectToPrettyJson")
    public void objectToPrettyJson(@RequestBody JsonObject jsonObject) {
        log.info("objectToPrettyJson:{}", jsonUtil.toPrettyJson(jsonObject));
    }

    /**
     * 将json字符串进行json格式化打印
     */
    @RequestMapping("/stringToPrettyJson")
    public void objectToPrettyJson() {
        String jsonString = "{\"name\":\"John Doe\",\"age\":30,\"email\":\"johndoe@example.com\",\"address\":{\"street\":\"123 Main St\",\"city\":\"Springfield\",\"state\":\"IL\",\"zipcode\":\"62704\"},\"phoneNumbers\":[{\"type\":\"home\",\"number\":\"555-1234\"},{\"type\":\"work\",\"number\":\"555-5678\"}],\"isVerified\":true}";
        log.info("stringToPrettyJson:{}", jsonUtil.toPrettyJson(jsonString));
    }
}
5.ToolApplication.java 启动类
package cn.sunxiansheng.tool;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * Description: ToolApplication
 *
 * @Author sun
 * @Create 2025/1/24 19:01
 * @Version 1.0
 */
@SpringBootApplication
public class ToolApplication {

    public static void main(String[] args) {
        SpringApplication.run(ToolApplication.class, args);
    }
}
6.测试

CleanShot 2025-01-24 at 19.27.55@2x

CleanShot 2025-01-24 at 19.28.04@2x


http://www.kler.cn/a/542442.html

相关文章:

  • 开源机器人+具身智能 解决方案+AI
  • 2025.2.8——二、Confusion1 SSTI模板注入|Jinja2模板
  • Tomcat添加到Windows系统服务中,服务名称带空格
  • 对比 LVS 负载均衡群集的 NAT 模式和 DR 模式,其各自的优势
  • [学习笔记] Kotlin Compose-Multiplatform
  • 在CT107D单片机综合训练平台上实现外部中断控制LED闪烁
  • 什么是容器化,它有什么好处,对后端开发有什么影响?
  • 【2025-ICLR-未中】教授多模态大语言模型理解心电图图像
  • 【C#零基础从入门到精通】(五)——C# {n:format} 占位符
  • C#调用Python的函数(编译为pyd,避免源码泄露)
  • 朝天椒USB服务器:破解银企直连中Ukey管理难题
  • 算法-反转链表
  • MATLAB电机四阶轨迹规划考虑jerk、Djerk
  • MarsCode AI插件在IntelliJ IDEA中使用
  • 2025最新版Node.js下载安装~保姆级教程
  • Bash (Bourne-Again Shell)、Zsh (Z Shell)
  • 【AI-28】RAG的深入浅出
  • OpenCV2D 特征框架 (19)目标检测类cv::CascadeClassifier的使用
  • 基于Win XDMA的PCIE 2.0 X8速率不足原因分析与解决方案
  • 深度学习中的梯度相关问题
  • Python----PyQt开发(PyQt基础,环境搭建,Pycharm中PyQttools工具配置,第一个PyQt程序)
  • 记录docker 卡住不动了
  • AIOS: 一个大模型驱动的Multi-Agent操作系统设计与Code分析
  • Ansible中playbook的变量
  • DeepSeek与蓝耘智算平台:人工智能与高效算力的协同革命
  • 使用verilog 实现cordic 算法 ---- 向量模式