异常处理

对于业务异常情况(数据找不到、找到子记录等),业务代码中只需封装异常并抛出,最后在请求处理层通过切面的方式进行统一的异常处理,返回统一的异常结构。

异常封装

后端返回的异常信息必需的元素是错误信息(message)。异常的错误编码(code)可以根据业务需要进行细化(一般来说使用HTTP status code即可满足要求),某些情况下,异常可能会携带发生异常的具体数据。

ErrorResult.java
package com.example.demo;

import lombok.Builder;
import lombok.Data;

@Data
@Builder
public class ErrorResult {
    private int code;
    private String message;
    private Object data;
}

使用lombok提供的@Builder注解可以很方便的实现建造者模式。

异常定义

业务性质的异常,直接使用BizException即可。如果开发人员希望简化某些结构化异常的编码,可以继承BizException定义业务异常。

以找不到指定的数据记录为例:

  • 使用自定义异常:throw new ResourceNotFoundException("航班", 1);

  • 不使用自定义异常:throw new BizException("找不到ID为1的航班");

业务异常的定义是灵活的,异常中的内容和构造方法可以根据需要定义。

异常抛出

业务代码中,根据需要抛出自定义的异常。

异常处理

开发者需要使用@RestControllerAdvice注解定义统一的异常处理类,针对需要处理的异常(可能是自定义业务异常,也有可能是JPA定义的PersistenceException),使用@ExceptionHandler注解进行全局的捕获和处理。

Last updated