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); } }
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; } }
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!"); } }
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"); } }
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; } }
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!