每次调用第三方请求都需要手动记录请求和响应日志,可以利用hutool工具包的请求工具设置对应的拦截器,可以省去此步骤,代码如下:
package com.ninerapoint.tms.interceptor;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpInterceptor;
import cn.hutool.http.HttpRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.Resource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
@Slf4j
public class HutoolInterceptor implements HttpInterceptor<HttpRequest> {
@Override
public void process(HttpRequest request) {
log.info("\n【Request Url】: {}\n【Request Method】: {}\n【Request Body】: {}\n【Request Params】: {}",
request.getUrl(), request.getMethod(), StrUtil.blankToDefault(StrUtil.str(request.bodyBytes(),
request.charset()), StrUtil.EMPTY), collectHttpParam(request));
}
private Object collectHttpParam(HttpRequest request) {
Map<String, Object> form = request.form();
if (CollUtil.isNotEmpty(form)){
HashMap<String, Object> paramsMap = MapUtil.newHashMap();
form.forEach((key, value) -> {
if (!(value instanceof Resource)) {
paramsMap.put(key, Arrays.toString(new Object[]{value}));
}
});
if (CollUtil.isNotEmpty(paramsMap)){
return MapUtil.join(paramsMap, "&", "=");
}
}
return StrUtil.EMPTY;
}
}
需注意的是需要手动添加拦截器,我使用的方法是启动类添加静态代码块
static {
GlobalInterceptor.INSTANCE.addRequestInterceptor(new HutoolInterceptor());
}