diff --git a/servers/boe-server-all/src/main/java/com/xboe/config/LoggingMappingJackson2HttpMessageConverter.java b/servers/boe-server-all/src/main/java/com/xboe/config/LoggingMappingJackson2HttpMessageConverter.java new file mode 100644 index 00000000..438988bb --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/config/LoggingMappingJackson2HttpMessageConverter.java @@ -0,0 +1,56 @@ +package com.xboe.config; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpOutputMessage; +import org.springframework.http.converter.HttpMessageNotWritableException; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.lang.NonNull; +import org.springframework.lang.Nullable; + +import java.io.IOException; +import java.lang.reflect.Type; + +public class LoggingMappingJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter { + + private static final Logger logger = LoggerFactory.getLogger(LoggingMappingJackson2HttpMessageConverter.class); + + private final ObjectMapper objectMapper; + + public LoggingMappingJackson2HttpMessageConverter(ObjectMapper objectMapper) { + this.objectMapper = objectMapper; + } + + @Override + protected void writeInternal(@NonNull Object object, @NonNull HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { + // 记录转换前的数据 + String jsonBefore = objectMapper.writeValueAsString(object); + logger.info("===========Response JSON Before Conversion: {}", jsonBefore); + + // 调用父类方法进行实际的转换 + super.writeInternal(object, outputMessage); + + // 记录转换后的数据 + // 注意:由于输出流已经写入,这里无法直接获取转换后的数据 + // 可以考虑使用类似拦截器的方法来捕获响应体 + } + + /* + * 重写父类的writeInternal方法,在响应体写入前记录原始数据 + */ + @Override + public void writeInternal(@NonNull Object object, @Nullable Type type, @NonNull HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { + // 记录转换前的数据 + String jsonBefore = objectMapper.writeValueAsString(object); + logger.info("===========Response JSON type Before Conversion: {}", jsonBefore); + + // 调用父类方法进行实际的转换 + super.writeInternal(object, type, outputMessage); + + // 记录转换后的数据 + // 注意:由于输出流已经写入,这里无法直接获取转换后的数据 + // 可以考虑使用类似拦截器的方法来捕获响应体 + } +} + diff --git a/servers/boe-server-all/src/main/java/com/xboe/config/WebConfig.java b/servers/boe-server-all/src/main/java/com/xboe/config/WebConfig.java new file mode 100644 index 00000000..a0a7ad68 --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/config/WebConfig.java @@ -0,0 +1,48 @@ +package com.xboe.config; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import java.util.List; + +@Configuration +public class WebConfig implements WebMvcConfigurer { + + private static final Logger logger = LoggerFactory.getLogger(WebConfig.class); + + + //结果处理器 + @Bean + public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(ObjectMapper objectMapper) { + return new LoggingMappingJackson2HttpMessageConverter(objectMapper); + } + + /** + * 在默认的消息转换器基础上添加或移除某些转换器 + * 保证StringHttpMessageConverter在FastJsonHttpMessageConverter前被调用 + * + * @param converters the list of configured converters to be extended + */ + @Override + public void extendMessageConverters(List> converters) { + converters.removeIf(t -> t instanceof MappingJackson2HttpMessageConverter); + converters.add(mappingJackson2HttpMessageConverter(new ObjectMapper())); + for (HttpMessageConverter converterLoop : converters) { + logger.info("==######### Registered e message converter: {}", converterLoop.getClass().getName()); + } + } + +// @Override +// public void configureMessageConverters(List> converters) { +// converters.add(mappingJackson2HttpMessageConverter(new ObjectMapper())); +// for (HttpMessageConverter converter : converters) { +// logger.info("==#########Registered message converter: {}", converter.getClass().getName()); +// } +// } +} \ No newline at end of file