你的位置:首页 > 软件开发 > Java > Spring框架下的 “接口调用、MVC请求” 调用参数、返回值、耗时信息输出

Spring框架下的 “接口调用、MVC请求” 调用参数、返回值、耗时信息输出

发布时间:2016-11-28 12:01:44
主要拦截前端或后天的请求,打印请求方法参数、返回值、耗时、异常的日志。方便开发调试,能很快定位到问题出现在哪个方法中。 前端请求拦截,mvc的** 1 import java.util.Date; 2 import java.util.Iterator; 3 impo ...

Spring框架下的 “接口调用、MVC请求” 调用参数、返回值、耗时信息输出

主要拦截前端或后天的请求,打印请求方法参数、返回值、耗时、异常的日志。方便开发调试,能很快定位到问题出现在哪个方法中。

 

 Spring框架下的 “接口调用、MVC请求” 调用参数、返回值、耗时信息输出

Spring框架下的 “接口调用、MVC请求” 调用参数、返回值、耗时信息输出

前端请求拦截,mvc的**

Spring框架下的 “接口调用、MVC请求” 调用参数、返回值、耗时信息输出Spring框架下的 “接口调用、MVC请求” 调用参数、返回值、耗时信息输出
 1 import java.util.Date; 2 import java.util.Iterator; 3 import java.util.Map; 4 import java.util.Set; 5  6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpServletResponse; 8  9 import org.codehaus.jackson.map.ObjectMapper; 10 import org.springframework.core.NamedThreadLocal; 11 import org.springframework.web.servlet.HandlerInterceptor; 12 import org.springframework.web.servlet.ModelAndView; 13  14 import com.xxx.eduyun.sdk.log.ApplicationLogging; 15 import com.xxx.flipclass.sdk.client.utils.TimeUtil; 16  17 /** 18  * <b>function:</b> spring mvc 请求** 19  * @author hoojo 20  * @createDate 2016-11-24 下午3:19:27 21  * @file MVCRequestInterceptor.java 22  * @package com.xxx.eduyun.app.mvc.interceptor 23  * @project eduyun-app-web 24  * @blog http://blog.csdn.net/IBM_hoojo 25  * @email hoojo_@126.com 26  * @version 1.0 27 */ 28 public class MVCRequestInterceptor extends ApplicationLogging implements HandlerInterceptor { 29  30   private static final ObjectMapper mapper = new ObjectMapper(); 31   private NamedThreadLocal<Long> startTimeThreadLocal = new NamedThreadLocal<Long>("StopWatch-startTimed");  32    33   @Override 34   public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 35      36      37     info("##############################【一个MVC完整请求开始】##############################"); 38      39     info("*******************MVC业务处理开始**********************"); 40     try { 41       long timed = System.currentTimeMillis(); 42       startTimeThreadLocal.set(timed); 43        44       String requestURL = request.getRequestURI(); 45       info("当前请求的URL:【{}】", requestURL); 46       info("执行目标方法: {}", handler); 47        48       Map<String, ?> params = request.getParameterMap(); 49       if (!params.isEmpty()) { 50         info("当前请求参数打印:"); 51         print(request.getParameterMap(), "参数"); 52       } 53     } catch (Exception e) { 54       error("MVC业务处理-**异常:", e); 55     } 56     info("*******************MVC业务处理结束**********************"); 57      58     return true; 59   } 60  61   @Override 62   public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { 63      64     info("*******************一个MVC 视图渲染开始**********************"); 65      66     try { 67       info("执行业务逻辑代码耗时:【{}】", TimeUtil.formatTime(new Date().getTime() - startTimeThreadLocal.get())); 68       String requestURL = request.getRequestURI(); 69       info("当前请求的URL:【{}】", requestURL); 70        71       if (modelAndView != null) { 72         info("即将返回到MVC视图:{}", modelAndView.getViewName()); 73          74         if (modelAndView.getView() != null) { 75           info("返回到MVC视图内容类型ContentType:{}", modelAndView.getView().getContentType()); 76         } 77          78         if (!modelAndView.getModel().isEmpty()) { 79            80           info("返回到MVC视图{}数据打印如下:", modelAndView.getViewName()); 81           print(modelAndView.getModel(), "返回数据"); 82         } 83       } 84     } catch (Exception e) { 85       error("MVC 视图渲染-**异常:", e); 86     } 87      88     info("*******************一个MVC 视图渲染结束**********************"); 89   } 90  91   @Override 92   public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { 93      94     try { 95       String requestURL = request.getRequestURI(); 96       info("MVC返回请求完成URL:【{}】", requestURL); 97       info("MVC返回请求完成耗时:【{}】", TimeUtil.formatTime(new Date().getTime() - startTimeThreadLocal.get())); 98       if (ex != null) { 99         info("MVC返回请求发生异常:", ex.getMessage());100         error("异常信息如下:", ex);101       }102     } catch (Exception e) {103       error("MVC完成返回-**异常:", e);104     }105     106     info("##############################【一个MVC完整请求完成】##############################");107   }108   109   private void print(Map<String, ?> map, String prefix) {110     if (map != null) {111       Set<String> keys = map.keySet();112       Iterator<String> iter = keys.iterator();113       while (iter.hasNext()) {114         115         String name = iter.next();116         if (name.contains("org.springframework.validation.BindingResult")) {117           continue;118         }119         120         String value = "";121         try {122           value = mapper.writeValueAsString(map.get(name));123         } catch (Exception e) {124           error("转换参数【{}】发生异常:", name, e);125         }126         info("{} \"{}\": {}", prefix, name, value);127       }128     }129   }130 }

原标题:Spring框架下的 “接口调用、MVC请求” 调用参数、返回值、耗时信息输出

关键词:Spring

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录