package cn.com.cmbc.e.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import cn.com.cmbc.e.model.ReturnCode;
@ControllerAdvice
public class ExceptionController {
@Autowired
private HttpServletRequest request;
@Autowired
private HttpServletResponse response;
@ExceptionHandler(Exception.class)
@ResponseBody
public ReturnCode handleException(Exception e) {
LoggerFactory.getLogger(this.getClass()).error("【异常拦截日志】>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", e);
try {
if (request.getHeader("accept").indexOf("text/html") != -1) { //如果接受类型为html,就返回错误页面,否则返回json文本
request.setAttribute("msg", e.getMessage());
//必须使用注入的request和response,不能在方法参数中定义request和response,否则不会拦截org.springframework.web.bind.MissingServletRequestParameterException等异常
request.getRequestDispatcher("/WEB-INF/view/error.jsp").forward(request, response);
return null;
}
} catch (ServletException | IOException ex) {
LoggerFactory.getLogger(this.getClass()).error("handleException发生了异常", ex);
}
return ReturnCode.fail(e.getMessage()); //ReturnCode是用来返回统一json格式的javaBean
}
}
@RequestMapping("login")
public String index(@RequestParam String username) {
return "index";
}
如果username没有传值,这时候就会引发org.springframework.web.bind.MissingServletRequestParameterException