这段代码是一个全局异常处理类,使用了Spring框架提供的@ControllerAdvice注解。它捕获并处理Controller中抛出的各种异常。
首先,它定义了一个方法handleException
来处理异常。该方法接受一个Throwable类型的参数e,表示发生的异常。然后根据不同类型的异常进行不同的处理逻辑。
- 如果是BindException类型的异常,表示请求参数绑定错误,会遍历获取每个字段错误信息,并将错误信息添加到message字符串中,并返回相应的HobbyResponse对象。
- 如果是ConstraintViolationException类型的异常,表示请求参数校验失败(普通传参),会遍历获取每个约束违规信息,并将错误信息添加到message字符串中,并返回相应的HobbyResponse对象。
- 如果是HttpMessageNotReadableException或MethodArgumentTypeMismatchException类型的异常,表示请求参数类型错误,在这里统一返回REQUEST_PARAM_TYPE_ERROR类型的HobbyResponse对象。
- 如果是MissingServletRequestParameterException类型的异常,表示缺少请求参数,在这里将缺少的参数名和类型添加到message字符串中,并返回相应的HobbyResponse对象。
- 如果是HttpRequestMethodNotSupportedException或NoHandlerFoundException类型的异常,则分别返回METHOD_NOT_ALLOWED和NOT_FOUND类型对应的HobbyResponse对象。
- 如果是MaxUploadSizeExceededException类型的异常,表示上传文件大小超出限制,在这里直接返回PAYLOAD_TOO_LARGE对应的HobbyResponse对象。
- 如果是BusinessException自定义业务异常,则根据具体情况返回自定义业务码和消息的HobbyResponse对象。
- 最后,对于其他未处理的异常,则返回INTERNAL_SERVER_ERROR类型的HobbyResponse对象,并记录错误日志。
请注意,代码中使用了@Slf4j
注解来实现日志功能,同时使用了@ResponseBody
注解将方法返回值转换为JSON格式。
内容由零声教学AI助手提供,问题来源于学员提问