import com.alibaba.fastjson.JSON;
import com.shsxt.crm.model.ResultInfo;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Method;
/**
* Created by lyf on 2019/7/15.
*/
@Component
public class GlobalExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response,
Object target, Exception ex) {
ModelAndView mv = createDefaultModelAndView(request, ex);
/***
* 区分: 普通page页面请求和json数据请求?
* 通过@ResponseBody注解区分
* */
if(target instanceof HandlerMethod){
System.out.println(target);
HandlerMethod handlerMethod = (HandlerMethod) target;
Method method = handlerMethod.getMethod();
ResponseBody responseBody = method.getAnnotation(ResponseBody.class);
if(null==responseBody){
if(ex instanceof ParamsException){
ParamsException e = (ParamsException) ex;
mv.setViewName("error");// 可以单独设置
mv.addObject("errorMsg", e.getMsg());
}
}else{
ResultInfo info = new ResultInfo();
info.setCode(300);// 默认错误码
info.setMsg("系统繁忙");// 默认错误信息
if(ex instanceof ParamsException){
ParamsException e = (ParamsException) ex;
info.setCode(e.getCode());
info.setMsg(e.getMsg());
}
/**
* 响应JSON到前台
*/
response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
PrintWriter pw =null;
try {
pw = response.getWriter();
pw.write(JSON.toJSONString(info));
pw.flush();
pw.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(null!=pw){
pw.close();
}
}
return null;
}
}
return mv;
}
private ModelAndView createDefaultModelAndView(HttpServletRequest request, Exception ex) {
ModelAndView mv = new ModelAndView();
mv.setViewName("error");
mv.addObject("errorMsg", ex.getMessage());
return mv;
}
}