public class ProjectException extends Exception {
/**
* 创建一个新的实例 BoracayException.
*
* @param message
*/
public ProjectException(String message) {
super(message);
}
public ProjectException(String message, Throwable cause) {
super(message, cause);
}
}
public class extends ProjectException {
/**
* 创建一个新的实例 ControllerException.
* 下午3:36:53
*
* @param message
*/
public ControllerException(final String message) {
super(message);
}
/**
* 创建一个新的实例 ControllerException. @Auther 徐泽宇 @Date 2016年11月4日
* 下午12:50:57
*
* @param bindingResult
*/
}
public class ServiceException extends ProjectException {
/** @Fields serialVersionUID : 序列号随机数 */
private static final long serialVersionUID = 694905108298102070L;
/**
* 创建一个新的实例 ServiceException.
*
* @param message
*/
public ServiceException(final String message) {
super(message);
}
public ServiceException(final String message, final Throwable cause) {
super(message, cause);
}
}
统一异常处理
/**
* 这是一个全局错误处理器类。@ExceptionHandler 注解表示这个方法处理所有的 Exception
* 类型的异常。在这个方法中,我们将异常信息返回给浏览器端,并设置 HTTP 状态码为 500。
*/
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleException(Throwable e) {
log.debug("接管 excpetion,定制返回的内容", e);
ExceptionObject exceptionObject = new ExceptionObject();
if (null == e.getCause()) {
exceptionObject.message = e.getLocalizedMessage();
} else {
exceptionObject.message = e.getCause().getLocalizedMessage();
}
exceptionObject.error = HttpStatus.INTERNAL_SERVER_ERROR.value();
exceptionObject.time = new Date();
// exceptionObject.trace = e.getStackTrace();
exceptionObject.trace = null;
if (e instanceof MaxUploadSizeExceededException) {
exceptionObject.message = "上传文件的字节数,已经超过系统限制的4M字节了!";
}
if (e instanceof SessionTimeOutException) {
// 这里特殊化处理
// session失效的错误指定为 508
exceptionObject.error = 508;
exceptionObject.message = e.getMessage();
return ResponseEntity.status(508).contentType(MediaType.APPLICATION_JSON)
.body(JSONObject.toJSONString(exceptionObject));
}
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).contentType(MediaType.APPLICATION_JSON)
.body(JSONObject.toJSONString(exceptionObject));
}
@Data
private class ExceptionObject {
@JSONField
int error;
@JSONField
String message;
@JSONField
Date time;
@JSONField
StackTraceElement[] trace;
@JSONField
String path;
}
}
所有的异常都会到此方法中,将异常信息以相应格式进行返回