Flyer的后花园

微信公众号:历史帝

spring基于@ExceptionHandler的异常处理

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

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

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/AlbertFly/article/details/51549198
个人分类: spring
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

spring基于@ExceptionHandler的异常处理

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭