工具模块新增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.目录结构
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.目录结构
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);
}
}