从头搭建一个SpringBoot项目,至少应该引入哪些配置?( 四 )
@Data @EqualsAndHashCode(callSuper = false) public class CustomException extends RuntimeException { /** * 状态码 */ private final Integer code; /** * 方法名称 */ private final String method; /** * 自定义异常 * * @param resultEnum 返回枚举对象 * @param method 方法 */ public CustomException(ResultEnum resultEnum, String method) { super(resultEnum.getmsg); this.code = resultEnum.getCode; this.method = method; } /** * @param code 状态码 * @param message 错误信息 * @param method 方法 */ public CustomException(Integer code, String message, String method) { super(message); this.code = code; this.method = method; } }
错误信息枚举根据业务进行添加 。@Getter public enum ResultEnum { /** * 未知异常 */ UNKNOWN_EXCEPTION(100, "未知异常"), /** * 添加失败 */ ADD_ERROR(103, "添加失败"), /** * 更新失败 */ UPDATE_ERROR(104, "更新失败"), /** * 删除失败 */ DELETE_ERROR(105, "删除失败"), /** * 查找失败 */ GET_ERROR(106, "查找失败"), ; private Integer code; private String msg; ResultEnum(Integer code, String msg) { this.code = code; this.msg = msg; } /** * 通过状态码获取枚举对象 * @param code 状态码 * @return 枚举对象 */ public static ResultEnum getByCode(int code){ for (ResultEnum resultEnum : ResultEnum.values) { if(code == resultEnum.getCode){ return resultEnum; } } return null; } }
全局异常拦截全局异常拦截是使用@ControllerAdvice进行实现 , 常用的异常拦截配置可以查看 GlobalExceptionHandling @Slf4j @RestControllerAdvice public class GlobalExceptionHandling { /** * 自定义异常 */ @ExceptionHandler(value = http://news.hoteastday.com/a/CustomException.class) public ResultVo processException(CustomException e) { log.error("位置:{} -> 错误信息:{}", e.getMethod ,e.getLocalizedMessage); return ResultVoUtil.error(Objects.requireNonNull(ResultEnum.getByCode(e.getCode))); } /** * 通用异常 */ @ResponseStatus(HttpStatus.OK) @ExceptionHandler(Exception.class) public ResultVo exception(Exception e) { e.printStackTrace; return ResultVoUtil.error(ResultEnum.UNKNOWN_EXCEPTION); } }
/** * 删除用户 * @param id 用户编号 * @return 成功或者失败 */ @ApiOperation("删除用户") @DeleteMapping("/deleteUser/{id}") public ResultVo deleteUser(@PathVariable("id") String id){ userService.deleteUser(id); return ResultVoUtil.success; }
Service/** * 删除用户 * @param id id */ @Override public void deleteUser(String id) { // 如果删除失败抛出异常 。-- 演示而已不推荐这样干 if(!removeById(id)){ throw new CustomException(ResultEnum.DELETE_ERROR, MethodUtil.getLineInfo); } }
结果 本文插图
将报错代码所在的文件第多少行都打印出来 。 方便排查 。
注意的点所有手动抛出的错误信息 , 都应在错误信息枚举ResultEnum进行统一维护 。 不同的业务使用不同的错误码 。 方便在报错时进行分辨 。 快速定位问题 。
- 霍金|霍金留下三个预言,每一个都事关人类安危,第一个已经开始应验
- 三星|德媒:中国或许将成为下一个全球创新总部!
- 数字货币|你的“花呗”额度降了吗?“借呗”整改后下一个来了,有用户直接被停
- Windows|New Windows 11操作系统壁纸灵感来源,新的视角,一个新的时代
- 奥陌陌|奥陌陌:人类观察到的第一个外星文明迹象?留下了哪些未解之谜?
- 联想|拆解联想电脑,没有任何一个核心零部件是国产的,塑料壳和螺丝是国产的
- 物联网|物联网解决方案的前端开发
- 女娲|一个模型通杀8大视觉任务,一句话生成图像视频、P图视频处理都行
- UFO|詹姆斯韦伯遇到了一个小问题,全面测试导致发射延迟了几天
- 芯片|一个指令查电脑使用痕迹!动过什么文件,看得清清楚楚