4、全局异常处理类
@ControllerAdvice@Slf4jpublic class GlobalExceptionHandler {* 处理自定义的api异常* @param e* @return@ResponseBody@ExceptionHandler(value = https://www.isolves.com/it/cxkf/kj/2022-11-18/BusinessException.class)public Result handle(BusinessException e) {if (Objects.nonNull(e.getErrorCode())) {log.error("发生业务异常!原因是:{}", e.getErrorMsg());return Result.failed(e.getErrorCode(), e.getErrorMsg());return Result.failed(e.getMessage());* 处理参数验证失败异常 基于json格式的数据传递 , 这种传递才会抛出MethodArgumentNotValidException异常* @param e* @return@ResponseBody@ExceptionHandler(value = MethodArgumentNotValidException.class)public Result handleValidException(MethodArgumentNotValidException e) {BindingResult bindingResult = e.getBindingResult();String message = null;if (bindingResult.hasErrors()) {FieldError fieldError = bindingResult.getFieldError();if (Objects.nonNull(fieldError)) {message = fieldError.getField() + fieldError.getDefaultMessage();return Result.validateFailed(message);* 使用@Validated 来校验 JavaBean的参数 , 比如@NotNull、@NotBlank等等; post 请求数据传递有两种方式 , 一种是基于form-data格式的数据传递 , 这种传递才会抛出BindException异常* @param e* @return@ResponseBody@ExceptionHandler(value = BindException.class)public Result handleValidException(BindException e) {BindingResult bindingResult = e.getBindingResult();String message = null;if (bindingResult.hasErrors()) {FieldError fieldError = bindingResult.getFieldError();if (fieldError != null) {message = fieldError.getField() + fieldError.getDefaultMessage();return Result.validateFailed(message);复制代码统一返回格式
目前比较流行的是基于 json 格式的数据交互 。但是 json 只是消息的格式 , 其中的内容还需要我们自行设计 。不管是 HTTP 接口还是 RPC 接口保持返回值格式统一很重要 , 这将大大降低 client 的开发成本 。
定义返回值四要素
- boolean success ;是否成功 。
- T data ;成功时具体返回值 , 失败时为 null。
- String code ;成功时返回 200 , 失败时返回具体错误码 。
- String message ;成功时返回 null , 失败时返回具体错误消息 。
返回对象中会处理分页结果 , 普通的查询结果 , 异常等信息 。
@Data@NoArgsConstructorpublic class Result implements Serializable {private T data;private String code;private String message;private boolean success;protected Result(String code, String message, T data) {this.code = code;this.message = message;this.data = https://www.isolves.com/it/cxkf/kj/2022-11-18/data;this.success = true;protected Result(String code, String message, T data, boolean success) {this(code, message, data);this.success = success;public static Result ok() {return ok((T) null);* 成功返回结果* @param data 获取的数据* @returnpublic static Result ok(T data) {return new Result<>(ExceptionEnum.SUCCESS.getResultCode(),ExceptionEnum.SUCCESS.getResultMsg(), data);* 成功返回list结果* @param list 获取的数据* @returnpublic static Result> ok(List list) {Result> listResult = new Result<>(ExceptionEnum.SUCCESS.getResultCode(),ExceptionEnum.SUCCESS.getResultMsg(), list);return listResult;* 成功返回结果* @param data 获取的数据* @param message 提示信息public static Result ok(T data, String message) {return new Result<>(ExceptionEnum.SUCCESS.getResultCode(), message, data);* 失败返回结果* @param error 错误码public static Result failed(IError error) {return new Result<>(error.getResultCode(), error.getResultMsg(), null, false);* 失败返回结果* @param error 错误码* @param message 错误信息public static Result failed(IError error, String message) {return new Result<>(error.getResultCode(), message, null, false);* 失败返回结果* @param errorCode 错误码* @param message 错误信息public static Result failed(String errorCode, String message) {return new Result<>(errorCode, message, null, false);* 失败返回结果* @param message 提示信息public static Result failed(String message) {return new Result<>(ExceptionEnum.INTERNAL_SERVER_ERROR.getResultCode(), message, null, false);* 失败返回结果public static Result failed() {return failed(ExceptionEnum.INTERNAL_SERVER_ERROR);* 参数验证失败返回结果public static Result validateFailed() {return failed(ExceptionEnum.VALIDATE_FAILED);* 参数验证失败返回结果* @param message 提示信息public static Result validateFailed(String message) {return new Result<>(ExceptionEnum.VALIDATE_FAILED.getResultCode(), message, null, false);* 未登录返回结果public static Result unauthorized(T data) {return new Result<>(ExceptionEnum.UNAUTHORIZED.getResultCode(),ExceptionEnum.UNAUTHORIZED.getResultMsg(), data, false);* 未授权返回结果public static Result forbidden(T data) {return new Result
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 科目二考试有几个项目,科目二考试有时间限制吗
- 李晨|李晨如今在娱乐圈的尴尬咖位,重点项目是客串,近几年没有代表作
- 产检项目及时间表
- 小学运动会开展哪些项目运动好
- 赚钱好项目有哪些?
- 如何寻找互联网创业项目经验 如何寻找互联网创业项目经理
- 如何寻找好的创业项目经验 如何寻找好的创业项目经理
- 招聘|36氪项目报道 | 猎头由专精领域转向全域,Morgan McKinley 中国以项目制人才解决方案寻找新路径
- 汽车保养项目有哪些?
- 卓越|上班族副业推荐,副业赚钱有哪些项目, 可发展的长期副业项目
