spring boot 全局异常处理通过 `@controlleradvice` 和 `@exceptionhandler` 捕获双写不一致异常。具体做法是定义一个自定义异常类,在业务逻辑中抛出该异常,并在全局异常处理器中拦截它返回统一响应。

如何定义双写不一致异常
需要创建一个继承自 `RuntimeException` 的自定义异常类,用于标识数据写入冲突。

public class DoubleWriteInconsistencyException extends RuntimeException {
public DoubleWriteInconsistencyException(String message) {
super(message);
}
}
如何在 Controller 中抛出该异常
在 Service 层检测到双写不一致时抛出异常,Controller 无需特殊处理。

@RestController
public class DataController {
@Autowired
private DataService dataService;
@PostMapping("/data")
public ResponseEntity<String> saveData(@RequestBody String data) {
try {
dataService.processAndSave(data);
return ResponseEntity.ok("Success");
} catch (DoubleWriteInconsistencyException e) {
throw e; // 重新抛出以便被全局处理器捕获
}
}
}
全局异常处理器如何响应
使用 `@ControllerAdvice` 定义全局异常处理器,专门处理 `DoubleWriteInconsistencyException`。
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(DoubleWriteInconsistencyException.class)
public ResponseEntity<Map<String, Object>> handleDoubleWriteException(DoubleWriteInconsistencyException ex) {
Map<String, Object> body = new HashMap<>();
body.put("error", "Double Write Inconsistency");
body.put("message", ex.getMessage());
return ResponseEntity.status(HttpStatus.CONFLICT).body(body);
}
}


















