|
@@ -30,12 +30,16 @@ import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.http.HttpStatus;
|
|
|
import org.springframework.validation.FieldError;
|
|
|
+import org.springframework.web.HttpMediaTypeNotSupportedException;
|
|
|
+import org.springframework.web.HttpRequestMethodNotSupportedException;
|
|
|
import org.springframework.web.bind.MethodArgumentNotValidException;
|
|
|
+import org.springframework.web.bind.MissingServletRequestParameterException;
|
|
|
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.bind.annotation.RestControllerAdvice;
|
|
|
+import org.springframework.web.servlet.NoHandlerFoundException;
|
|
|
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
import java.sql.SQLException;
|
|
|
import java.util.List;
|
|
@@ -47,7 +51,6 @@ public class RestControllerExceptionTranslator {
|
|
|
|
|
|
@ExceptionHandler(JSONException.class)
|
|
|
@ResponseStatus(HttpStatus.BAD_REQUEST)
|
|
|
- @ResponseBody
|
|
|
ResponseMessage handleException(JSONException exception) {
|
|
|
logger.error("json error", exception);
|
|
|
return ResponseMessage.error(400, exception.getMessage());
|
|
@@ -55,7 +58,6 @@ public class RestControllerExceptionTranslator {
|
|
|
|
|
|
@ExceptionHandler(org.hswebframework.ezorm.rdb.exception.ValidationException.class)
|
|
|
@ResponseStatus(HttpStatus.BAD_REQUEST)
|
|
|
- @ResponseBody
|
|
|
ResponseMessage<Object> handleException(org.hswebframework.ezorm.rdb.exception.ValidationException exception) {
|
|
|
return ResponseMessage.error(400, exception.getMessage())
|
|
|
.result(exception.getValidateResult());
|
|
@@ -63,14 +65,12 @@ public class RestControllerExceptionTranslator {
|
|
|
|
|
|
@ExceptionHandler(ValidationException.class)
|
|
|
@ResponseStatus(HttpStatus.BAD_REQUEST)
|
|
|
- @ResponseBody
|
|
|
ResponseMessage<List<ValidateResults.Result>> handleException(ValidationException exception) {
|
|
|
return ResponseMessage.<List<ValidateResults.Result>>error(400, exception.getMessage())
|
|
|
.result(exception.getResults());
|
|
|
}
|
|
|
|
|
|
@ExceptionHandler(BusinessException.class)
|
|
|
- @ResponseBody
|
|
|
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
|
|
|
ResponseMessage handleException(BusinessException exception) {
|
|
|
if (exception.getCause() != null) {
|
|
@@ -81,28 +81,24 @@ public class RestControllerExceptionTranslator {
|
|
|
|
|
|
@ExceptionHandler(UnAuthorizedException.class)
|
|
|
@ResponseStatus(HttpStatus.UNAUTHORIZED)
|
|
|
- @ResponseBody
|
|
|
ResponseMessage handleException(UnAuthorizedException exception) {
|
|
|
return ResponseMessage.error(401, exception.getMessage()).result(exception.getState());
|
|
|
}
|
|
|
|
|
|
@ExceptionHandler(AccessDenyException.class)
|
|
|
@ResponseStatus(HttpStatus.FORBIDDEN)
|
|
|
- @ResponseBody
|
|
|
ResponseMessage handleException(AccessDenyException exception) {
|
|
|
return ResponseMessage.error(403, exception.getMessage());
|
|
|
}
|
|
|
|
|
|
@ExceptionHandler(NotFoundException.class)
|
|
|
@ResponseStatus(HttpStatus.NOT_FOUND)
|
|
|
- @ResponseBody
|
|
|
ResponseMessage handleException(NotFoundException exception) {
|
|
|
return ResponseMessage.error(404, exception.getMessage());
|
|
|
}
|
|
|
|
|
|
@ExceptionHandler(MethodArgumentNotValidException.class)
|
|
|
@ResponseStatus(HttpStatus.BAD_REQUEST)
|
|
|
- @ResponseBody
|
|
|
ResponseMessage handleException(MethodArgumentNotValidException e) {
|
|
|
SimpleValidateResults results = new SimpleValidateResults();
|
|
|
e.getBindingResult().getAllErrors()
|
|
@@ -116,7 +112,6 @@ public class RestControllerExceptionTranslator {
|
|
|
|
|
|
@ExceptionHandler(RuntimeException.class)
|
|
|
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
|
|
|
- @ResponseBody
|
|
|
ResponseMessage handleException(RuntimeException exception) {
|
|
|
logger.error(exception.getMessage(), exception);
|
|
|
return ResponseMessage.error(500, exception.getMessage());
|
|
@@ -124,7 +119,6 @@ public class RestControllerExceptionTranslator {
|
|
|
|
|
|
@ExceptionHandler(NullPointerException.class)
|
|
|
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
|
|
|
- @ResponseBody
|
|
|
ResponseMessage handleException(NullPointerException exception) {
|
|
|
logger.error(exception.getMessage(), exception);
|
|
|
return ResponseMessage.error(500, "服务器内部错误");
|
|
@@ -132,7 +126,6 @@ public class RestControllerExceptionTranslator {
|
|
|
|
|
|
@ExceptionHandler(SQLException.class)
|
|
|
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
|
|
|
- @ResponseBody
|
|
|
ResponseMessage handleException(SQLException exception) {
|
|
|
logger.error(exception.getMessage(), exception);
|
|
|
return ResponseMessage.error(500, "服务器内部错误");
|
|
@@ -140,9 +133,61 @@ public class RestControllerExceptionTranslator {
|
|
|
|
|
|
@ExceptionHandler(IllegalArgumentException.class)
|
|
|
@ResponseStatus(HttpStatus.BAD_REQUEST)
|
|
|
- @ResponseBody
|
|
|
ResponseMessage handleException(IllegalArgumentException exception) {
|
|
|
logger.error(exception.getMessage(), exception);
|
|
|
return ResponseMessage.error(400, "参数错误:" + exception.getMessage());
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 请求方式不支持异常
|
|
|
+ * 比如:POST方式的API, GET方式请求
|
|
|
+ */
|
|
|
+ @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
|
|
|
+ @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED)
|
|
|
+ ResponseMessage handleException(HttpRequestMethodNotSupportedException exception) {
|
|
|
+ logger.error(exception.getMessage(), exception);
|
|
|
+ return ResponseMessage.error(HttpStatus.METHOD_NOT_ALLOWED.value(), "请求API的方式不支持").result(exception.getSupportedHttpMethods());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 404异常,Spring MVC DispatcherServlet 当没找到 Handler处理请求时,
|
|
|
+ * 如果配置了 throwExceptionIfNoHandlerFound 为 true时,会抛出此异常
|
|
|
+ *
|
|
|
+ * 在配置文件中使用:
|
|
|
+ * spring:
|
|
|
+ * mvc:
|
|
|
+ * throw-exception-if-no-handler-found: true
|
|
|
+ *
|
|
|
+ * @see org.springframework.web.servlet.DispatcherServlet#noHandlerFound(HttpServletRequest, HttpServletResponse)
|
|
|
+ */
|
|
|
+ @ExceptionHandler(NoHandlerFoundException.class)
|
|
|
+ @ResponseStatus(HttpStatus.NOT_FOUND)
|
|
|
+ ResponseMessage handleException(NoHandlerFoundException exception) {
|
|
|
+ logger.error(exception.getMessage(), exception);
|
|
|
+ return ResponseMessage.error(HttpStatus.NOT_FOUND.value(), "请求URL不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * ContentType不支持异常
|
|
|
+ * 比如:@RequestBody注解,需要Content-Type: application/json, 但是请求未指定使用的默认的 Content-Type: application/x-www-form-urlencoded
|
|
|
+ */
|
|
|
+ @ExceptionHandler(HttpMediaTypeNotSupportedException.class)
|
|
|
+ @ResponseStatus(HttpStatus.UNSUPPORTED_MEDIA_TYPE)
|
|
|
+ ResponseMessage handleException(HttpMediaTypeNotSupportedException exception) {
|
|
|
+ logger.error(exception.getMessage(), exception);
|
|
|
+ return ResponseMessage.error(HttpStatus.UNSUPPORTED_MEDIA_TYPE.value(), "请求URL不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 请求方法的的参数缺失
|
|
|
+ */
|
|
|
+ @ExceptionHandler(MissingServletRequestParameterException.class)
|
|
|
+ @ResponseStatus(HttpStatus.BAD_REQUEST)
|
|
|
+ ResponseMessage handleException(MissingServletRequestParameterException exception) {
|
|
|
+ logger.error(exception.getMessage(), exception);
|
|
|
+ return ResponseMessage.error(HttpStatus.BAD_REQUEST.value(), "请求缺失参数:" + exception.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
}
|