文章目录
- 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 注入 loggingGsonpublic 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 {/*** 自动配置成功日志*/@PostConstructpublic 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*/@Beanpublic 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 {@Resourceprivate JsonUtil jsonUtil;/*** A test endpoint.** @return A sample response.*/@RequestMapping("/test")public String test() {return "This is a test response from ToolController";}@Datapublic 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);}
}