GlobalExceptionHandler 全局异常
/**
* @Description: 全局的的异常拦截器(拦截所有的控制器)
*/
@RestControllerAdvice
@Order(-1)
@Slf4j
public class GlobalExceptionHandler {
/**
* 所有异常信息
*
* @param exception
* @return
* @throws Exception
*/
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(Exception.class)
public Result<?> exceptionHandler(Exception exception) {
log.error("exceptionHandle [{}]", exception.toString());
if (exception instanceof LoginToException){
exception.printStackTrace();
return Result.error(((LoginToException) exception).getMessageCode(), exception.getMessage());
}
exception.printStackTrace();
return Result.error(ReturnCode.OTHER_ERROR.getCode(), exception.getMessage());
}
@ExceptionHandler(DuplicateKeyException.class)
public Result<?> handleDuplicateKeyException(DuplicateKeyException e) {
log.error(e.getMessage(), e);
return Result.error("数据库中已存在该记录");
}
@ExceptionHandler(AuthenticationException.class)
public Result<?> authenticationExceptionException(DuplicateKeyException e) {
log.error(e.getMessage(), e);
return Result.error("Token已失效");
}
@ExceptionHandler(MethodArgumentNotValidException.class)
public Result<?> methodArgumentNotValidException(MethodArgumentNotValidException e) {
log.error(e.getMessage(), e);
List<Map<String, Object>> list = new ArrayList<>();
List<FieldError> errorList = e.getBindingResult().getFieldErrors();
errorList.forEach(fieldError -> {
Map<String, Object> map = new HashMap<>();
map.put(fieldError.getField(), fieldError.getDefaultMessage());
list.add(map);
});
return Result.error(HttpStatus.EXPECTATION_FAILED.value(), "参数异常", list);
}
@ExceptionHandler(ValidationException.class)
public Result<?> validationException(ValidationException e) {
log.error(e.getMessage(), e);
return Result.error("参数异常");
}
}
Result返回类
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import org.slf4j.MDC;
import org.springframework.http.HttpStatus;
@Getter
@Setter
@ApiModel(value = "Result", description = "返回结果对象")
public class Result<T> {
/**
* 成功标志
*/
@ApiModelProperty(value = "成功标志")
private boolean success = true;
/**
* 返回处理消息
*/
@ApiModelProperty(value = "返回处理消息")
private String message = "操作成功!";
/**
* 返回代码
*/
@ApiModelProperty(value = "返回代码")
private Integer code = 0;
/**
* 返回数据对象 data
*/
@ApiModelProperty(value = "返回数据对象")
private T result;
/**
* 时间戳
*/
@ApiModelProperty(value = "时间戳")
private long timestamp = System.currentTimeMillis();
/**
* 请求日志跟踪ID
*/
@ApiModelProperty(value = "日志跟踪ID")
private String traceId= MDC.get("TRACE_ID");
public Result() {
}
public Result<T> success(String message) {
this.message = message;
this.code = HttpStatus.OK.value();
this.success = true;
return this;
}
public static<T> Result<T> OK() {
Result<T> r = new Result<T>();
r.setSuccess(true);
r.setCode(HttpStatus.OK.value());
r.setMessage("成功");
return r;
}
public static<T> Result<T> OK(ReturnCode returnCode) {
Result<T> r = new Result<T>();
r.setSuccess(true);
r.setCode(HttpStatus.OK.value());
r.setMessage(returnCode.getMsg());
r.setResult(null);
return r;
}
public static<T> Result<T> Error(ReturnCode returnCode) {
Result<T> r = new Result<T>();
r.setSuccess(false);
r.setCode(returnCode.getCode());
r.setMessage(returnCode.getMsg());
r.setResult(null);
return r;
}
public static<T> Result<T> Error(ReturnCode returnCode,T data) {
Result<T> r = new Result<T>();
r.setSuccess(false);
r.setCode(returnCode.getCode());
r.setMessage(returnCode.getMsg());
r.setResult(data);
return r;
}
public static<T> Result<T> OK(T data) {
Result<T> r = new Result<T>();
r.setSuccess(true);
r.setCode(HttpStatus.OK.value());
r.setResult(data);
return r;
}
public static<T> Result<T> OK(String msg, T data) {
Result<T> r = new Result<T>();
r.setSuccess(true);
r.setCode(HttpStatus.OK.value());
r.setMessage(msg);
r.setResult(data);
return r;
}
public static Result<Object> error(String msg) {
return error(HttpStatus.EXPECTATION_FAILED.value(), msg);
}
public static Result<Object> error(int code, String msg) {
Result<Object> r = new Result<Object>();
r.setCode(new Integer(code));
r.setMessage(msg);
r.setSuccess(false);
return r;
}
public static Result<Object> error(Integer code, String msg) {
Result<Object> r = new Result<Object>();
r.setCode(code);
r.setMessage(msg);
r.setSuccess(false);
return r;
}
public static Result<Object> error(int code, String msg, Object data) {
Result<Object> r = new Result<Object>();
r.setCode(code);
r.setMessage(msg);
r.setSuccess(false);
r.setResult(data);
return r;
}
public Result<T> error500(String message) {
this.message = message;
this.code = HttpStatus.EXPECTATION_FAILED.value();
this.success = false;
return this;
}
/**
* 无权限访问返回结果
*/
public static Result<Object> noauth(String msg) {
return error(HttpStatus.NON_AUTHORITATIVE_INFORMATION.value(), msg);
}
}
ValidatedGroup 分组校验类
/**
* 接口参数校验组对象
*/
public class ValidatedGroup {
/**
* 新增操作校验组
*/
public interface AddGroup{};
/**
* 更新操作校验组
*/
public interface UpdateGroup{};
/**
* 查询操作校验组
*/
public interface QueryGroup{};
}
请求参数类
Controller使用类
异常报错效果:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/192796.html