Commit 5ead7a8e authored by liwu's avatar liwu Committed by liaozan

添加每个异常对应的http code

parent 59680bbc
package com.schbrain.common.web.exception; package com.schbrain.common.web.exception;
import static com.schbrain.common.constants.ResponseCodeConstants.PARAM_INVALID;
import static com.schbrain.common.constants.ResponseCodeConstants.SERVER_ERROR;
import static com.schbrain.common.util.support.ValidationMessageBuilder.buildBindingErrorMsg;
import static com.schbrain.common.util.support.ValidationMessageBuilder.buildConstraintViolationErrorMsg;
import cn.hutool.core.exceptions.ExceptionUtil; import cn.hutool.core.exceptions.ExceptionUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.schbrain.common.constants.ResponseActionConstants; import com.schbrain.common.constants.ResponseActionConstants;
import com.schbrain.common.exception.BaseException; import com.schbrain.common.exception.BaseException;
import com.schbrain.common.web.result.ResponseDTO; import com.schbrain.common.web.result.ResponseDTO;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;
import javax.validation.ConstraintViolationException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.dao.DataAccessException; import org.springframework.dao.DataAccessException;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.util.ClassUtils; import org.springframework.util.ClassUtils;
import org.springframework.validation.BindException; import org.springframework.validation.BindException;
import org.springframework.web.*; import org.springframework.web.HttpMediaTypeNotAcceptableException;
import org.springframework.web.bind.*; import org.springframework.web.HttpMediaTypeNotSupportedException;
import org.springframework.web.bind.annotation.*; import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.MissingPathVariableException;
import org.springframework.web.bind.MissingRequestCookieException;
import org.springframework.web.bind.MissingRequestHeaderException;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.ServletRequestBindingException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.context.request.async.AsyncRequestTimeoutException; import org.springframework.web.context.request.async.AsyncRequestTimeoutException;
import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
import org.springframework.web.multipart.support.MissingServletRequestPartException; import org.springframework.web.multipart.support.MissingServletRequestPartException;
import org.springframework.web.servlet.NoHandlerFoundException; import org.springframework.web.servlet.NoHandlerFoundException;
import javax.validation.ConstraintViolationException;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;
import static com.schbrain.common.constants.ResponseCodeConstants.PARAM_INVALID;
import static com.schbrain.common.constants.ResponseCodeConstants.SERVER_ERROR;
import static com.schbrain.common.util.support.ValidationMessageBuilder.buildBindingErrorMsg;
import static com.schbrain.common.util.support.ValidationMessageBuilder.buildConstraintViolationErrorMsg;
/** /**
* @author liaozan * @author liaozan
* @since 2019/10/14 * @since 2019/10/14
...@@ -45,6 +52,7 @@ public class GlobalExceptionHandler { ...@@ -45,6 +52,7 @@ public class GlobalExceptionHandler {
} }
/************************************* Base Exception Handing *************************************/ /************************************* Base Exception Handing *************************************/
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler(BaseException.class) @ExceptionHandler(BaseException.class)
public Object handleBaseException(BaseException ex) { public Object handleBaseException(BaseException ex) {
logError(ex); logError(ex);
...@@ -52,21 +60,25 @@ public class GlobalExceptionHandler { ...@@ -52,21 +60,25 @@ public class GlobalExceptionHandler {
} }
/************************************* Common Exception Handing *************************************/ /************************************* Common Exception Handing *************************************/
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler(Throwable.class) @ExceptionHandler(Throwable.class)
public Object handleAll(Throwable ex) { public Object handleAll(Throwable ex) {
return loggingThenBuildResponse(ex, SERVER_ERROR); return loggingThenBuildResponse(ex, SERVER_ERROR);
} }
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler(NullPointerException.class) @ExceptionHandler(NullPointerException.class)
public Object handleNullPointerException(NullPointerException ex) { public Object handleNullPointerException(NullPointerException ex) {
return loggingThenBuildResponse(ex, SERVER_ERROR); return loggingThenBuildResponse(ex, SERVER_ERROR);
} }
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(IllegalArgumentException.class) @ExceptionHandler(IllegalArgumentException.class)
public Object handleIllegalArgumentException(IllegalArgumentException ex) { public Object handleIllegalArgumentException(IllegalArgumentException ex) {
return loggingThenBuildResponse(ex, SERVER_ERROR); return loggingThenBuildResponse(ex, SERVER_ERROR);
} }
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler(IllegalStateException.class) @ExceptionHandler(IllegalStateException.class)
public Object handleIllegalStateException(IllegalStateException ex) { public Object handleIllegalStateException(IllegalStateException ex) {
return loggingThenBuildResponse(ex, SERVER_ERROR); return loggingThenBuildResponse(ex, SERVER_ERROR);
...@@ -78,23 +90,27 @@ public class GlobalExceptionHandler { ...@@ -78,23 +90,27 @@ public class GlobalExceptionHandler {
return loggingThenBuildResponse(ex, PARAM_INVALID); return loggingThenBuildResponse(ex, PARAM_INVALID);
} }
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler(AsyncRequestTimeoutException.class) @ExceptionHandler(AsyncRequestTimeoutException.class)
public Object handleAsyncRequestTimeoutException(AsyncRequestTimeoutException ex) { public Object handleAsyncRequestTimeoutException(AsyncRequestTimeoutException ex) {
return loggingThenBuildResponse(ex, SERVER_ERROR); return loggingThenBuildResponse(ex, SERVER_ERROR);
} }
/************************************* SQL Exception Handing *************************************/ /************************************* SQL Exception Handing *************************************/
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler(SQLException.class) @ExceptionHandler(SQLException.class)
public Object handleSQLException(SQLException ex) { public Object handleSQLException(SQLException ex) {
return loggingThenBuildResponse(ex, SERVER_ERROR); return loggingThenBuildResponse(ex, SERVER_ERROR);
} }
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler(DataAccessException.class) @ExceptionHandler(DataAccessException.class)
public Object handleDataAccessException(DataAccessException ex) { public Object handleDataAccessException(DataAccessException ex) {
return loggingThenBuildResponse(ex, SERVER_ERROR); return loggingThenBuildResponse(ex, SERVER_ERROR);
} }
/************************************* Http Request Exception Handing *************************************/ /************************************* Http Request Exception Handing *************************************/
@ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED)
@ExceptionHandler(HttpRequestMethodNotSupportedException.class) @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
public Object handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException ex) { public Object handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException ex) {
String errorMsg = StrUtil.format("不支持该HTTP方法: {}, 请使用 {}", ex.getMethod(), Arrays.toString(ex.getSupportedMethods())); String errorMsg = StrUtil.format("不支持该HTTP方法: {}, 请使用 {}", ex.getMethod(), Arrays.toString(ex.getSupportedMethods()));
...@@ -102,6 +118,7 @@ public class GlobalExceptionHandler { ...@@ -102,6 +118,7 @@ public class GlobalExceptionHandler {
return buildResponse(ex, PARAM_INVALID, errorMsg); return buildResponse(ex, PARAM_INVALID, errorMsg);
} }
@ResponseStatus(HttpStatus.UNSUPPORTED_MEDIA_TYPE)
@ExceptionHandler(HttpMediaTypeNotSupportedException.class) @ExceptionHandler(HttpMediaTypeNotSupportedException.class)
public Object handleHttpMediaTypeNotSupportedException(HttpMediaTypeNotSupportedException ex) { public Object handleHttpMediaTypeNotSupportedException(HttpMediaTypeNotSupportedException ex) {
String errorMsg = StrUtil.format("不支持该媒体类型: {}, 请使用 {}", ex.getContentType(), ex.getSupportedMediaTypes()); String errorMsg = StrUtil.format("不支持该媒体类型: {}, 请使用 {}", ex.getContentType(), ex.getSupportedMediaTypes());
...@@ -109,6 +126,7 @@ public class GlobalExceptionHandler { ...@@ -109,6 +126,7 @@ public class GlobalExceptionHandler {
return buildResponse(ex, PARAM_INVALID, errorMsg); return buildResponse(ex, PARAM_INVALID, errorMsg);
} }
@ResponseStatus(HttpStatus.NOT_ACCEPTABLE)
@ExceptionHandler(HttpMediaTypeNotAcceptableException.class) @ExceptionHandler(HttpMediaTypeNotAcceptableException.class)
public Object handleHttpMediaTypeNotAcceptableException(HttpMediaTypeNotAcceptableException ex) { public Object handleHttpMediaTypeNotAcceptableException(HttpMediaTypeNotAcceptableException ex) {
String errorMsg = StrUtil.format("不支持的媒体类型, 请使用 {}", ex.getSupportedMediaTypes()); String errorMsg = StrUtil.format("不支持的媒体类型, 请使用 {}", ex.getSupportedMediaTypes());
...@@ -117,6 +135,7 @@ public class GlobalExceptionHandler { ...@@ -117,6 +135,7 @@ public class GlobalExceptionHandler {
} }
/************************************* Method Parameter Exception Handing *************************************/ /************************************* Method Parameter Exception Handing *************************************/
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(HttpMessageNotReadableException.class) @ExceptionHandler(HttpMessageNotReadableException.class)
public Object handleHttpMessageNotReadableException(HttpMessageNotReadableException ex) { public Object handleHttpMessageNotReadableException(HttpMessageNotReadableException ex) {
String errorMsg = StrUtil.format("参数解析失败, {}", ex.getMessage()); String errorMsg = StrUtil.format("参数解析失败, {}", ex.getMessage());
...@@ -124,6 +143,7 @@ public class GlobalExceptionHandler { ...@@ -124,6 +143,7 @@ public class GlobalExceptionHandler {
return buildResponse(ex, PARAM_INVALID, errorMsg); return buildResponse(ex, PARAM_INVALID, errorMsg);
} }
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MethodArgumentTypeMismatchException.class) @ExceptionHandler(MethodArgumentTypeMismatchException.class)
public Object handlerMethodArgumentTypeMismatchException(MethodArgumentTypeMismatchException ex) { public Object handlerMethodArgumentTypeMismatchException(MethodArgumentTypeMismatchException ex) {
Object value = ex.getValue(); Object value = ex.getValue();
...@@ -136,6 +156,7 @@ public class GlobalExceptionHandler { ...@@ -136,6 +156,7 @@ public class GlobalExceptionHandler {
return buildResponse(ex, PARAM_INVALID, errorMsg); return buildResponse(ex, PARAM_INVALID, errorMsg);
} }
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MissingPathVariableException.class) @ExceptionHandler(MissingPathVariableException.class)
public Object handleMissingPathVariableException(MissingPathVariableException ex) { public Object handleMissingPathVariableException(MissingPathVariableException ex) {
String errorMsg = StrUtil.format("丢失路径参数, 参数名: {}, 参数类型: {}", ex.getVariableName(), ex.getParameter().getParameterType()); String errorMsg = StrUtil.format("丢失路径参数, 参数名: {}, 参数类型: {}", ex.getVariableName(), ex.getParameter().getParameterType());
...@@ -143,6 +164,7 @@ public class GlobalExceptionHandler { ...@@ -143,6 +164,7 @@ public class GlobalExceptionHandler {
return buildResponse(ex, PARAM_INVALID, errorMsg); return buildResponse(ex, PARAM_INVALID, errorMsg);
} }
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MissingRequestCookieException.class) @ExceptionHandler(MissingRequestCookieException.class)
public Object handleMissingRequestCookieException(MissingRequestCookieException ex) { public Object handleMissingRequestCookieException(MissingRequestCookieException ex) {
String errorMsg = StrUtil.format("丢失Cookie参数, 参数名: {}, 参数类型: {}", ex.getCookieName(), ex.getParameter().getParameterType()); String errorMsg = StrUtil.format("丢失Cookie参数, 参数名: {}, 参数类型: {}", ex.getCookieName(), ex.getParameter().getParameterType());
...@@ -150,6 +172,7 @@ public class GlobalExceptionHandler { ...@@ -150,6 +172,7 @@ public class GlobalExceptionHandler {
return buildResponse(ex, PARAM_INVALID, errorMsg); return buildResponse(ex, PARAM_INVALID, errorMsg);
} }
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MissingRequestHeaderException.class) @ExceptionHandler(MissingRequestHeaderException.class)
public Object handleMissingRequestHeaderException(MissingRequestHeaderException ex) { public Object handleMissingRequestHeaderException(MissingRequestHeaderException ex) {
String errorMsg = StrUtil.format("丢失Header参数, 参数名: {}, 参数类型: {}", ex.getHeaderName(), ex.getParameter().getParameterType()); String errorMsg = StrUtil.format("丢失Header参数, 参数名: {}, 参数类型: {}", ex.getHeaderName(), ex.getParameter().getParameterType());
...@@ -157,6 +180,7 @@ public class GlobalExceptionHandler { ...@@ -157,6 +180,7 @@ public class GlobalExceptionHandler {
return buildResponse(ex, PARAM_INVALID, errorMsg); return buildResponse(ex, PARAM_INVALID, errorMsg);
} }
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MissingServletRequestPartException.class) @ExceptionHandler(MissingServletRequestPartException.class)
public Object handleMissingServletRequestPartException(MissingServletRequestPartException ex) { public Object handleMissingServletRequestPartException(MissingServletRequestPartException ex) {
String errorMsg = StrUtil.format("丢失参数: {}", ex.getRequestPartName()); String errorMsg = StrUtil.format("丢失参数: {}", ex.getRequestPartName());
...@@ -164,6 +188,7 @@ public class GlobalExceptionHandler { ...@@ -164,6 +188,7 @@ public class GlobalExceptionHandler {
return buildResponse(ex, PARAM_INVALID, errorMsg); return buildResponse(ex, PARAM_INVALID, errorMsg);
} }
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MissingServletRequestParameterException.class) @ExceptionHandler(MissingServletRequestParameterException.class)
public Object handleServletRequestParameterException(MissingServletRequestParameterException ex) { public Object handleServletRequestParameterException(MissingServletRequestParameterException ex) {
String errorMsg = StrUtil.format("丢失Query参数, 参数名: {}, 参数类型: {}", ex.getParameterName(), ex.getParameterType()); String errorMsg = StrUtil.format("丢失Query参数, 参数名: {}, 参数类型: {}", ex.getParameterName(), ex.getParameterType());
...@@ -171,6 +196,7 @@ public class GlobalExceptionHandler { ...@@ -171,6 +196,7 @@ public class GlobalExceptionHandler {
return buildResponse(ex, PARAM_INVALID, errorMsg); return buildResponse(ex, PARAM_INVALID, errorMsg);
} }
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(ServletRequestBindingException.class) @ExceptionHandler(ServletRequestBindingException.class)
public Object handleServletRequestBindingException(ServletRequestBindingException ex) { public Object handleServletRequestBindingException(ServletRequestBindingException ex) {
String errorMsg = StrUtil.format("参数绑定失败: {}", ex.getMessage()); String errorMsg = StrUtil.format("参数绑定失败: {}", ex.getMessage());
...@@ -179,6 +205,7 @@ public class GlobalExceptionHandler { ...@@ -179,6 +205,7 @@ public class GlobalExceptionHandler {
} }
/************************************* Parameter Binding Exception Handing *************************************/ /************************************* Parameter Binding Exception Handing *************************************/
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(BindException.class) @ExceptionHandler(BindException.class)
public Object handleBindException(BindException ex) { public Object handleBindException(BindException ex) {
String errorMsg = buildBindingErrorMsg(ex.getBindingResult()); String errorMsg = buildBindingErrorMsg(ex.getBindingResult());
...@@ -186,6 +213,7 @@ public class GlobalExceptionHandler { ...@@ -186,6 +213,7 @@ public class GlobalExceptionHandler {
return buildResponse(ex, PARAM_INVALID, errorMsg); return buildResponse(ex, PARAM_INVALID, errorMsg);
} }
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(ConstraintViolationException.class) @ExceptionHandler(ConstraintViolationException.class)
public Object handleConstraintViolationException(ConstraintViolationException ex) { public Object handleConstraintViolationException(ConstraintViolationException ex) {
String errorMsg = buildConstraintViolationErrorMsg(ex.getConstraintViolations()); String errorMsg = buildConstraintViolationErrorMsg(ex.getConstraintViolations());
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment