使用springMVC框架时,因为前台的请求有些是ajax,有些是请求一个页面.而如果这些请求执行过程中有异常没有catch,会向前台页面抛出.url响应为500,可能也会将异常信息抛到前台,这既不安全也不规范.
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;
@Component
public class GlobalExceptionResolver extends SimpleMappingExceptionResolver{
@Override
protected ModelAndView doResolveException(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex){
//String requestType = request.getHeader("X-Requested-With");
response.setCharacterEncoding("UTF-8");
if (!(request.getHeader("accept").contains("application/json") ||
(request.getHeader("X-Requested-With")!= null &&
request.getHeader("X-Requested-With").contains("XMLHttpRequest")
)
)) {
// 如果不是异步请求
// Apply HTTP status code for error views, if specified.
// Only apply it if we're processing a top-level request.
System.out.println("JSP格式返回");
return getModelAndView("error/500", ex, request);//异常返回页面
} else {// JSON格式返回
try {
PrintWriter writer = response.getWriter();
writer.write(ex.getMessage());
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("JSON格式返回" );
return null;
}
}
}