一:定义的异常处理类
@ControllerAdvice public class GlobalExceptionHandler { private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); /** * 捕获服务端不能处理的内部异常 * @param request * @param e * @return * @throws Exception */ @ResponseBody @ExceptionHandler({Exception.class, InternalException.class,InternalResultNullException.class}) public HttpMessage handle500(HttpServletRequest request, HttpServletResponse response , Exception e) throws Exception { if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null) { throw e; } else { logger.error(e.getMessage(), e); } response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value()); return new HttpMessage<>(false, HttpStatus.INTERNAL_SERVER_ERROR, "服务器内部错误"); } @ResponseBody @ExceptionHandler(NoHandlerFoundException.class) public HttpMessage handle404(HttpServletRequest request,HttpServletResponse response, Exception e) { logger.error(e.getMessage(), e); response.setStatus(HttpStatus.NOT_FOUND.value()); return new HttpMessage<>(false, HttpStatus.NOT_FOUND, "请求地址不存在"); } @ResponseBody @ExceptionHandler(HttpRequestMethodNotSupportedException.class) public HttpMessage handle405(HttpServletRequest request,HttpServletResponse response,Exception e) { logger.error(e.getMessage(), e); response.setStatus(HttpStatus.METHOD_NOT_ALLOWED.value()); return new HttpMessage<>(false, HttpStatus.METHOD_NOT_ALLOWED, "不支持的请求方法"); } @ResponseBody @ExceptionHandler(NotSupportedException.class) public HttpMessage handle501(HttpServletRequest request,HttpServletResponse response,Exception e) { logger.error(e.getMessage(), e); response.setStatus(HttpStatus.NOT_IMPLEMENTED.value()); return new HttpMessage<>(false, HttpStatus.UNPROCESSABLE_ENTITY, "不支持的请求操作"); } @ResponseBody @ExceptionHandler(ParameterException.class) public HttpMessage handle400(HttpServletRequest request,HttpServletResponse response,Exception e) { logger.error(e.getMessage(), e); response.setStatus(HttpStatus.NOT_FOUND.value()); return new HttpMessage<>(false, HttpStatus.BAD_REQUEST, e.getMessage()); } @ResponseBody @ExceptionHandler(RepetitionException.class) public HttpMessage handle409(HttpServletRequest request,HttpServletResponse response,Exception e) { logger.error(e.getMessage(), e); response.setStatus(HttpStatus.CONFLICT.value()); return new HttpMessage<>(false, HttpStatus.CONFLICT, e.getMessage()); } @ResponseBody @ExceptionHandler(ResultNullException.class) public HttpMessage handle200(HttpServletRequest request,HttpServletResponse response,Exception e) { logger.error(e.getMessage(), e); response.setStatus(HttpStatus.OK.value()); return new HttpMessage<>(true, HttpStatus.OK, e.getMessage()); } }
二:定义的消息HttpMessage消息体
public class HttpMessage<T> { /** * properties */ private T content; private int status; private String message; /** * content getter * * @return content */ public T getContent() { return content; } /** * content setter * * @param content content */ public void setContent(T content) { this.content = content; } /** * status getter * * @return status */ public int getStatus() { return status; } /** * status setter * * @param status status */ public void setStatus(int status) { this.status = status; } /** * message getter * * @return message */ public String getMessage() { return message; } /** * message setter * * @param message message */ public void setMessage(String message) { this.message = message; } public HttpMessage(T content, HttpStatus status, String message) { this.content = content; this.status = status.value(); this.message = message; } public HttpMessage() { } }
三:定义的异常类(这里我只列举出一个)
package com.iflyrec.hiseechat.exception; public class ParameterException extends RuntimeException{ public ParameterException(String message) { super(message); } public ParameterException() { } }
在需要抛异常的位置直接throw new 目标异常
举例:throw new parameterException("声明错误信息");