Commit 421445c3 by 张祺

增加基础代码

parent f173dbb5
package com.keymobile.indicators.exception;
import com.keymobile.indicators.result.ResultCodeEnum;
import lombok.Data;
@Data
public class BaseCodeException extends Exception {
/**
* 异常编码
*/
private ResultCodeEnum errCode;
public BaseCodeException(ResultCodeEnum code, String message) {
super(message);
this.errCode = code;
}
}
package com.keymobile.indicators.exception;
/**
* 基础异常
*/
public class BaseException extends Exception {
public BaseException(String message) {
super(message);
}
}
package com.keymobile.indicators.exception; package com.keymobile.indicators.exception;
import com.keymobile.indicators.result.Result;
import com.keymobile.indicators.result.ResultCodeEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.Ordered; import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order; import org.springframework.core.annotation.Order;
import org.springframework.dao.DataIntegrityViolationException; import org.springframework.validation.BindException;
import org.springframework.http.ResponseEntity; import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR; import javax.naming.AuthenticationException;
@Order(Ordered.HIGHEST_PRECEDENCE) @Order(Ordered.HIGHEST_PRECEDENCE)
@ControllerAdvice @ControllerAdvice
public class RestExceptionHandler extends ResponseEntityExceptionHandler { @Slf4j
public class RestExceptionHandler {
@ExceptionHandler(Exception.class) @ExceptionHandler(Exception.class)
protected ResponseEntity<Object> handlException(Exception ex, WebRequest request) { protected Result<Object> handlException(Exception ex) {
ApiError apiError; Throwable e = ex.getCause();
if (ex instanceof DataIntegrityViolationException) { if (e == null) {
apiError = new ApiError(INTERNAL_SERVER_ERROR, ex.getMessage(), "重复值", ex); e = ex;
} else {
apiError = new ApiError(INTERNAL_SERVER_ERROR, ex.getMessage(), ex);
} }
return buildResponseEntity(apiError); if (e instanceof BindException) {
FieldError fe = ((BindException) e).getBindingResult().getFieldError();
String errorMsg = fe.getField() + fe.getDefaultMessage();
log.warn(errorMsg, e);
return Result.genOteherCodeFailResult(ResultCodeEnum.VALIDATE_ERROR_CODE, errorMsg);
}
if(e instanceof AuthenticationException){
String errorMsg = e.getMessage();
log.warn(errorMsg, e);
return Result.genOteherCodeFailResult(ResultCodeEnum.VALIDATE_ERROR_CODE, errorMsg);
}
if (e instanceof IllegalArgumentException) {
String errorMsg = e.getMessage();
log.warn(errorMsg, e);
return Result.genOteherCodeFailResult(ResultCodeEnum.VALIDATE_ERROR_CODE, errorMsg);
}
if (e instanceof MethodArgumentNotValidException) {
FieldError fe = ((MethodArgumentNotValidException) e).getBindingResult().getFieldError();
String errorMsg = fe.getField() + fe.getDefaultMessage();
log.info(errorMsg, e);
return Result.genOteherCodeFailResult(ResultCodeEnum.VALIDATE_ERROR_CODE, errorMsg);
}
if (e instanceof BaseCodeException) {
ResultCodeEnum errcode = ((BaseCodeException) e).getErrCode();
String errorMsg = e.getMessage();
log.info(errorMsg, e);
return Result.genOteherCodeFailResult(errcode, errorMsg);
} }
if (e instanceof BaseException) {
String errorMsg = e.getMessage();
log.info(errorMsg, e);
return Result.genOteherCodeFailResult(ResultCodeEnum.VALIDATE_ERROR_CODE, errorMsg);
private ResponseEntity<Object> buildResponseEntity(ApiError apiError) {
return new ResponseEntity<>(apiError, apiError.getStatus());
} }
log.error(e.getMessage(), e);
return Result.genOteherCodeFailResult(ResultCodeEnum.BASE_ERROR_CODE, ResultCodeEnum.BASE_ERROR_CODE.getMsg());
}
} }
...@@ -90,6 +90,10 @@ public class Result<T> implements Serializable { ...@@ -90,6 +90,10 @@ public class Result<T> implements Serializable {
return new Result<Object>(resultCodeEnum, data); return new Result<Object>(resultCodeEnum, data);
} }
public static Result genOteherCodeFailResult(ResultCodeEnum resultCodeEnum, final String msg) {
return new Result<Object>(resultCodeEnum, msg, null);
}
public static Result genMethodErrorResult() { public static Result genMethodErrorResult() {
return new Result<Object>(ResultCodeEnum.METHOD_NOT_ALLOWED, DEFAULT_METHOD_NOT_ALLOWED_MESSAGE); return new Result<Object>(ResultCodeEnum.METHOD_NOT_ALLOWED, DEFAULT_METHOD_NOT_ALLOWED_MESSAGE);
} }
......
...@@ -5,6 +5,7 @@ package com.keymobile.indicators.result; ...@@ -5,6 +5,7 @@ package com.keymobile.indicators.result;
*/ */
public enum ResultCodeEnum { public enum ResultCodeEnum {
// 响应码定义 // 响应码定义
// ====== 通用状态码 ====== // ====== 通用状态码 ======
// 正常 // 正常
...@@ -25,6 +26,9 @@ public enum ResultCodeEnum { ...@@ -25,6 +26,9 @@ public enum ResultCodeEnum {
INVALID_TYPE(-5, "%s 参数类型不正确 value:%s"), INVALID_TYPE(-5, "%s 参数类型不正确 value:%s"),
INVALID_PARAM(-5, "%s 参数不正确 value:%s"), INVALID_PARAM(-5, "%s 参数不正确 value:%s"),
INVALID_BODY_PARAM(-5, "请求体不正确:%s"), INVALID_BODY_PARAM(-5, "请求体不正确:%s"),
VALIDATE_ERROR_CODE(-6, "验证错误"),
BASE_ERROR_CODE(-7, "基础错误"),
OCCUPATION_CLOSED(10001,"所查占用已被临时关闭"), OCCUPATION_CLOSED(10001,"所查占用已被临时关闭"),
......
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