/**
* 打印請求後返回的數據格式
*
*/
@Aspect
@Component
@Slf4j
public class LogAop {
@Autowired
private ObjectMapper objectMapper;
private static final String LOG = "ip: {} ,url:{} ,params: {}, responseBody: {}";
@Around("execution(* controller包路勁..*(..))")
public Object printLog(ProceedingJoinPoint point) throws Throwable {
Object result = null;
// 接收到請求,記錄請求內容
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if(attributes!=null) {
result =point.proceed();
if(result!=null) {
HttpServletRequest request= attributes.getRequest();
log.info(LOG, IPUtils.getIpAddr(request), request.getRequestURI(), HttpUtils.getParameterStringMap(request),objectMapper.writeValueAsString(result));
}
}
return result;
}
}
public class HttpUtils {
public static Map<String, String> getParameterStringMap(HttpServletRequest request) {
Map<String, String[]> properties = request.getParameterMap();// 把請求參數封裝到Map<String, String[]>中
Map<String, String> returnMap = new TreeMap<String, String>();
String name = "";
String value = "";
for (Map.Entry<String, String[]> entry : properties.entrySet()) {
name = entry.getKey();
if (!"files".startsWith(name)) {
String[] values = entry.getValue();
if (null == values) {
value = "";
} else if (values.length > 1) {
for (int i = 0; i < values.length; i++) { // 用於請求參數中有多個相同名稱
value = values[i] + ",";
}
value = value.substring(0, value.length() - 1);
}else if (value.length()==0){
value="";
}
else {
value = values[0];// 用於請求參數中請求參數名唯一
}
returnMap.put(name, value);
}
}
return returnMap;
}
}