关闭

spring基于@ExceptionHandler的异常处理

155人阅读 评论(0) 收藏 举报
分类:

定义一个基础的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处的逻辑

然后我们可以定义多种异常.

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:541024次
    • 积分:8006
    • 等级:
    • 排名:第2554名
    • 原创:209篇
    • 转载:425篇
    • 译文:0篇
    • 评论:38条
    最新评论