ExceptionHandler.java
2.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package com.cjs.site.action.interceptor;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import com.cjs.site.biz.ServiceException;
import com.cjs.site.util.lang.DateUtil;
import com.cjs.site.util.web.ActionUtil;
/**
* Web通用异常处理
*
* @author tongyufu
*
*/
@Component
public class ExceptionHandler implements HandlerExceptionResolver {
Logger log = LogManager.getLogger();
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception e) {
Map<String, Object> model = new HashMap<String, Object>();
if (e instanceof ServiceException) {
model.put("errorMessage", e.getMessage());
} else {
model.put("errorMessage", "服务器异常,请联系客服:400-969-0800");
}
if (e instanceof ServiceException) {
log.error(getErrorMessage(new RuntimeException(e), request));
} else if (e instanceof RuntimeException) {
//注意:只在开发时打印异常堆栈信息
log.error(getErrorMessage(new RuntimeException(e), request), e);
} else {
log.error("", e);
}
model.put("e", e);
return new ModelAndView("common/500.jsp", model);
}
/**获取发生错误时的请求信息*/
private String getErrorMessage(RuntimeException ex, HttpServletRequest request) {
StringBuilder sb = new StringBuilder();
Map<String, String[]> params = request.getParameterMap();
HttpServletRequest httpServletRequest = ActionUtil.getRequest();
sb.append("\n异常时间:" + DateUtil.getNow());
sb.append("\n请求参数:{");
for (String param : params.keySet()) {
sb.append("\n\t").append(param).append(":").append(request.getParameter(param));
}
sb.append("\n}");
sb.append("\nIP:" + ActionUtil.getIP());
sb.append("\nURL:");
if (httpServletRequest != null) {
sb.append(httpServletRequest.getMethod() + " ");
}
sb.append("\n头信息:{");
for (Enumeration<String> e = request.getHeaderNames(); e.hasMoreElements();) {
String header = e.nextElement();
sb.append("\n\t").append(header).append(":").append(request.getHeader(header));
}
sb.append("\n}");
return sb.toString();
}
}