在国内做av网站军事最新消息
问题
当系统出现异常时,除了要在控制台、日志等后台进行输出之外,还需要在前端提示用户。
为了提示给用户,错误信息需要做一些约定:
- 错误信息统一用json格式返回给前端
- 以HTTP状态码判断是否出现异常,非200即为异常
实现
使用SpringMVC提供的控制器增强类实现。
引入相关依赖包
spring-web、log4j2相关…
定义通用的异常信息
/*** 通用异常信息*/
public enum CommonError {UNKNOWN_ERROR("执行异常"),PARAMS_ERROR("非法参数异常"),OBJECT_NULL("对象为空"),QUERY_NULL("查询结果为空"),REQUEST_NULL("请求参数为空");private String errMessage;public String getErrMessage() {return errMessage;}private CommonError(String errMessage) {this.errMessage = errMessage;}
}
自定义异常类型
/*** 自定义异常类*/
public class OnlineStudyException extends RuntimeException {private String errMessage;public OnlineStudyException() {super();}public OnlineStudyException(String errMessage) {super(errMessage);this.errMessage = errMessage;}public String getErrMessage() {return errMessage;}public static void cast(String errMessage) {throw new OnlineStudyException(errMessage);}public static void cast(CommonError commonError) {throw new OnlineStudyException(commonError.getErrMessage());}
}
响应用户的统一类型
public class RestErrorResponse implements Serializable {private String errMessage;public RestErrorResponse(String errMessage) {this.errMessage = errMessage;}public String getErrMessage() {return errMessage;}public void setErrMessage(String errMessage) {this.errMessage = errMessage;}
}
全局异常处理器
@Slf4j
@RestControllerAdvice //增强SpringMVC中的Controller 处理SpringMVC的异常信息
public class GlobalExceptionHandler {@ExceptionHandler(OnlineStudyException.class) //表明方法的处理异常类型@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)public RestErrorResponse customException(OnlineStudyException exception) {log.error("【系统异常】{}", exception.getErrMessage());return new RestErrorResponse(exception.getErrMessage());}@ExceptionHandler(Exception.class)@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) //用状态代码和应返回的原因标记方法或异常类。调用处理程序方法时,状态代码将应用于HTTP响应。public RestErrorResponse exception(Exception e) {log.error("【系统异常】{}", e.getMessage());return new RestErrorResponse(CommonError.UNKNOWN_ERROR.getErrMessage());}
}
测试
public CourseBaseInfoDto createCourseBase(Long companyId,AddCourseDto dto) {.....
//合法性校验if (StringUtils.isBlank(dto.getName())) {throw new XueChengPlusException("课程名称为空");}.....