Rumah > Java > javaTutorial > teks badan

Bagaimana untuk melaksanakan pengendalian pengecualian bersatu dalam SpringBoot

WBOY
Lepaskan: 2023-05-10 22:01:04
ke hadapan
1157 orang telah melayarinya

Senario: Untuk pengendalian pengecualian, pendekatan asal kami adalah untuk menangkap pengecualian pada lapisan paling luar, seperti

@Controller
public class HelloController {
 
  private static final Logger logger = LoggerFactory.getLogger(HelloController.class);
 
  @GetMapping(value = "/hello")
  @ResponseBody
  public Result hello() {
    try {
      //TODO 具体的逻辑省略……
    } catch (Exception e) {
      logger.error("hello接口异常={}", e);
      return ResultUtil.success(-1, "system error", null);
    }
    return ResultUtil.success(0, "success", null);
  }
}
Salin selepas log masuk

dalam Pengawal Ini juga boleh menyelesaikan beberapa masalah, tetapi ia tidak boleh diperolehi. Memperkenalkan pengendalian pengecualian bersatu global untuk pengecualian yang ditentukan sendiri akan meningkatkan kod dan mengurangkan penjanaan kod berlebihan.

Kelas pengecualian tersuai: Ambil perhatian bahawa ia mesti mewarisi daripada RuntimeException dan bukannya Exception Jika ia mewarisi daripada Exception, transaksi musim bunga tidak akan berbalik apabila pengecualian tersuai dilemparkan

public class GlobalException extends RuntimeException {
 
  private Integer code; //因为我需要将异常信息也返回给接口中,所以添加code区分
 
  public GlobalException(Integer code,String message) {
    super(message);  //把自定义的message传递个异常父类
    this.code = code;
  }
 
  public Integer getCode() {
    return code;
  }
 
  public void setCode(Integer code) {
    this.code = code;
  }
}
Salin selepas log masuk

Pengendali pengecualian Disatukan Tersuai: dua anotasi utama @ControllerAdvice dan @ExceptionHandler

@ControllerAdvice
public class ExceptionHandle {
 
  @ResponseBody  //因为我需要将抛出的异常返回给接口,所以加上此注解
  @ExceptionHandler
  public Result handle(Exception e) {
    if (e instanceof GlobalException) {
      GlobalException ge = (GlobalException) e;
      return ResultUtil.success1(ge.getCode(), ge.getMessage());
    }
    return ResultUtil.success1(-1, "system error!");
  }
 
}
Salin selepas log masuk

Tulis kelas ujian untuk menguji

@GetMapping(value = "/hello1")
@ResponseBody
public Result hello(@RequestParam(value = "age", defaultValue = "50", required = false) Integer age) throws GlobalException {
  if (age  50) {
    throw new GlobalException(ConstantEnum.MORE50.getCode(), ConstantEnum.MORE50.getMsg());
  } else {
    return ResultUtil.success1(0, "success");
  }
}
Salin selepas log masuk

merangkumkan kod dan mesej dalam ConstantEnum Dalam penghitungan , ia adalah mudah untuk penyelenggaraan bersepadu

public enum ConstantEnum {
 
  ERROR(-1, "system error!"),
  SUCCESS(100, "success"),
  LESS10(101, "自定义异常信息-我小于10岁"),
  MORE50(5001, "自定义异常信息-我大于50岁");
 
  private Integer code;
  private String msg;
 
  public Integer getCode() {
    return code;
  }
 
  public String getMsg() {
    return msg;
  }
 
  ConstantEnum(Integer code, String msg) {
    this.code = code;
    this.msg = msg;
  }
}
Salin selepas log masuk

Bagaimana untuk melaksanakan pengendalian pengecualian bersatu dalam SpringBoot

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pengendalian pengecualian bersatu dalam SpringBoot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan