监控出参

This commit is contained in:
emcch
2024-12-15 22:24:12 +08:00
parent 96261cf3f0
commit ceb8749781
2 changed files with 104 additions and 0 deletions

View File

@@ -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);
// 记录转换后的数据
// 注意:由于输出流已经写入,这里无法直接获取转换后的数据
// 可以考虑使用类似拦截器的方法来捕获响应体
}
}

View File

@@ -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<HttpMessageConverter<?>> 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<HttpMessageConverter<?>> converters) {
// converters.add(mappingJackson2HttpMessageConverter(new ObjectMapper()));
// for (HttpMessageConverter<?> converter : converters) {
// logger.info("==#########Registered message converter: {}", converter.getClass().getName());
// }
// }
}