定义一个基础的controller 类,其他的都继承于他
@Controller
public class GenericController {
private static final Logger LOGGER = LoggerFactory.getLogger(GenericController.class);
@ExceptionHandler(CustomException.class)
public void resolveCustomException(HttpServletRequest req, HttpServletResponse res, CustomException e)
throws Exception {
LOGGER.error(e.getMessage(), e);
// 异步请求
if (isAsyncRequest(req)) {
res.setContentType("application/json");
Writer.write(res, Ajax.buildErrorResult(e.getMessage()));
}
// 同步请求
else {
req.setAttribute("exception", Ajax.buildExceptionResult());
req.getRequestDispatcher("/error/500.html").forward(req, res);
}
}
private boolean isAsyncRequest(HttpServletRequest request) {
return request.getHeader("X-Requested-With") != null;
}
关于writer类
public class Writer {
private static final Logger LOGGER = LoggerFactory.getLogger(Writer.class);
private static final ObjectMapper MAPPER = new ObjectMapper();
public static void write(HttpServletResponse res, Object object) {
try {
MAPPER.writeValue(res.getOutputStream(), object);
} catch (IOException e) {
LOGGER.error(e.getMessage(), e);
}
}
}
自定义业务异常
public class CustomException extends RuntimeException {
private static final long serialVersionUID = 6666170142692714385L;
public CustomException() {
super();
}
public CustomException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
public CustomException(String message, Throwable cause) {
super(message, cause);
}
public CustomException(String message) {
super(message);
}
public CustomException(Throwable cause) {
super(cause);
}
}
然后程序抛出CustomException异常的地方都执行控制器里面 代码1处的逻辑
然后我们可以定义多种异常.