τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-06
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Κατά την ανάπτυξη εφαρμογών Spring Boot, ο τρόπος με τον οποίο αντιμετωπίζονται τα αποτελέσματα απόκρισης και οι εξαιρέσεις έχει καθοριστικό αντίκτυπο στη συντηρησιμότητα, την επεκτασιμότητα και τη συνεργασία της ομάδας του έργου. Τα αποτελέσματα διάσπαρτων απαντήσεων και η λογική διαχείρισης εξαιρέσεων συχνά οδηγούν σε περιττό κώδικα που είναι δύσκολο να κατανοηθεί και να διατηρηθεί. Επομένως, η ενοποιημένη απόδοση αποτελεσμάτων και ο ενοποιημένος χειρισμός εξαιρέσεων είναι μία από τις βασικές στρατηγικές για τη βελτίωση της ποιότητας του έργου.
Η ενοποίηση των επιστροφών αποτελεσμάτων συνήθως σημαίνει τον καθορισμό μιας τυπικής μορφής απόκρισης για όλες τις μεθόδους ελεγκτή. Αυτό μπορεί να επιτευχθεί δημιουργώντας μία ή περισσότερες κλάσεις οντοτήτων απόκρισης που περιέχουν κοινά πεδία όπως κωδικό κατάστασης, μήνυμα και δεδομένα. Αφού η μέθοδος ελεγκτή επεξεργαστεί την επιχειρηματική λογική, θα συμπληρώσει αυτά τα πεδία και θα τα επιστρέψει στον πελάτη.
Στη συνέχεια, ας ρίξουμε μια ματιά στον τρόπο επίτευξης ενιαίας απόδοσης αποτελεσμάτων στο SpringBoot.
1. Ορίστε ένα κοινό αντικείμενο απόκρισης
Δημιουργήστε ένα αντικείμενο γενικής απόκρισης, ορίστε σενάρια επιστροφής επιτυχίας και αποτυχίας και βεβαιωθείτε ότι το γενικό αντικείμενο επιστροφής χρησιμοποιείται στη διεπαφή.
public class ResponseResult {
private int code;
private String message;
private Object data;
public static ResponseResult success(Object data) {
ResponseResult responseResult = new ResponseResult();
responseResult.setData(data);
responseResult.setCode(ResultEnum.SUCCESS.code);
return responseResult;
}
public static ResponseResult error(ResultEnum resultEnum) {
return error(resultEnum, resultEnum.message);
}
public static ResponseResult error(ResultEnum resultEnum, String message) {
ResponseResult responseResult = new ResponseResult();
responseResult.setCode(resultEnum.code);
responseResult.setMessage(message);
return responseResult;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
2. Ορίστε τον κωδικό κατάστασης απόκρισης διεπαφής
Ο καθορισμός ενός κοινού συνόλου κωδικών κατάστασης είναι ένα από τα βασικά κλειδιά για την ενοποιημένη επιστροφή αποτελεσμάτων. Αυτή η προσέγγιση όχι μόνο βελτιώνει τη χρηστικότητα και τη δυνατότητα συντήρησης του API, αλλά επιτρέπει επίσης στον πελάτη να αναλύει και να επεξεργάζεται τα δεδομένα απόκρισης πιο αποτελεσματικά. Παρέχει επίσης στους προγραμματιστές API ένα σαφές και συνεπές πρότυπο.
public enum ResultEnum {
SUCCESS(200 ,"请求处理成功"),
SERVICE_ERROR(500, "服务器异常,请稍后重试");
public final Integer code;
public final String message;
ResultEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
}
3. Καθορίστε ενοποιημένες μεθόδους χειρισμού επιτυχίας και αποτυχίας
public class ResponseResult {
private int code;
private String message;
private Object data;
public static ResponseResult success(Object data) {
ResponseResult responseResult = new ResponseResult();
responseResult.setData(data);
responseResult.setCode(ResultEnum.SUCCESS.code);
return responseResult;
}
public static ResponseResult error(ResultEnum resultEnum) {
return error(resultEnum, resultEnum.message);
}
public static ResponseResult error(ResultEnum resultEnum, String message) {
ResponseResult responseResult = new ResponseResult();
responseResult.setCode(resultEnum.code);
responseResult.setMessage(message);
return responseResult;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
4. Ο ελεγκτής ανταποκρίνεται ομοιόμορφα στα αποτελέσματα
@GetMapping("/testResult")
public ResponseResult test() {
// 模拟业务逻辑
try {
// 假设这里有一些业务逻辑
return ResponseResult.success("success");
} catch (Exception e) {
// 捕获异常并返回错误信息
return ResponseResult.error(ResultEnum.SERVICE_ERROR);
}
}
Ο ενοποιημένος χειρισμός εξαιρέσεων χρησιμοποιεί έναν καθολικό χειριστή εξαιρέσεων για να καταγράφει και να χειρίζεται τις εξαιρέσεις που εισάγονται στον ελεγκτή. Αυτή η προσέγγιση αποφεύγει τη σύνταξη διπλότυπου κώδικα χειρισμού εξαιρέσεων σε κάθε μέθοδο ελεγκτή και επίσης καθιστά τη λογική χειρισμού εξαιρέσεων πιο συγκεντρωτική και ευκολότερη στη διαχείριση.
@RestControllerAdvice
Το @RestControllerAdvice είναι ένας συνδυασμένος σχολιασμός, ο οποίος είναι ένας συνδυασμός @ControllerAdvice και @ResponseBody. Χρησιμοποιείται κυρίως για την παροχή καθολικής διαμόρφωσης για το επίπεδο ελεγκτή, όπως χειρισμός εξαιρέσεων, δέσμευση δεδομένων, προεπεξεργασία δεδομένων κ.λπ. Δεδομένου ότι περιέχει το @ResponseBody, όλες οι μέθοδοι που επεξεργάζονται από το @RestControllerAdvice θα γράψουν την επιστρεφόμενη τιμή στο σώμα απόκρισης HTTP από προεπιλογή και θα ορίσουν τον κατάλληλο τύπο περιεχομένου.
@ExceptionHandler
Ο σχολιασμός @ExceptionHandler χρησιμοποιείται για την επισήμανση μιας μεθόδου που χειρίζεται τις εξαιρέσεις που εισάγονται στον ελεγκτή. Όταν μια μέθοδος στον ελεγκτή εισάγει μια εξαίρεση, το Spring θα αναζητήσει μια μέθοδο με σχολιασμό @ExceptionHandler που μπορεί να χειριστεί την εξαίρεση. Εάν ναι, καλείται η μέθοδος και επιστρέφεται η απόκρισή της.
Ειδοποίηση
当使用@ControllerAdvice时,我们需要将@ResponseBody添加到异常处理方法上。
如果我们使用@RestControllerAdvice,就不需要添加。
1. Ορίστε τις κατηγορίες εξαίρεσης επιχειρήσεων
Οι ενοποιημένες κατηγορίες εξαιρέσεων μπορούν να σας βοηθήσουν να διαχειριστείτε καλύτερα τα σφάλματα και τις εξαιρέσεις, καθιστώντας τον χειρισμό σφαλμάτων σε όλο το σύστημα πιο συνεπή και προβλέψιμο.
public class BusinessException extends RuntimeException{
private final ResultEnum resultEnum;
public BusinessException(ResultEnum resultEnum, String message) {
super(message);
this.resultEnum = resultEnum;
}
public BusinessException(ResultEnum resultEnum) {
this(resultEnum, resultEnum.message);
}
}
2. Παγκόσμιος χειριστής εξαιρέσεων
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler({BusinessException.class})
public ResponseResult handleBusinessException(BusinessException businessException, HttpServletRequest request) {
// 想处理的业务
return ResponseResult.error(ResultEnum.SERVICE_ERROR, businessException.getMessage());
}
/**
* 其他异常
* @param e
* @return
*/
@ExceptionHandler(value = Exception.class)
public ResponseResult handleOtherExceptions(Exception e) {
// 这里可以根据不同的异常类型返回不同的状态码和消息
// 但为了简单起见,这里只返回一个通用的错误信息
return ResponseResult.error(ResultEnum.SERVICE_ERROR);
}
}
3. Ενιαία επεξεργασία και χρήση
@GetMapping("/testException1")
public ResponseResult test1() {
if (true) {
// 业务场景
throw new BusinessException(ResultEnum.SERVICE_ERROR);
}
return ResponseResult.success("success");
}
Οφέλη από τη χρήση ενοποιημένου χειρισμού εξαιρέσεων
επαναχρησιμοποίηση κώδικα: Αποφύγετε τη σύνταξη παρόμοιων αποτελεσμάτων απόκρισης και κωδικών χειρισμού εξαιρέσεων σε πολλά σημεία.
Εύκολο στη συντήρηση: Όταν η μορφή απόκρισης ή η λογική χειρισμού εξαιρέσεων πρέπει να τροποποιηθεί, χρειάζεται να τροποποιηθεί μόνο σε ένα μέρος.
ΟΜΑΔΙΚΗ ΔΟΥΛΕΙΑ: Τα μέλη της ομάδας μπορούν πιο εύκολα να κατανοήσουν και να ακολουθήσουν ενοποιημένα πρότυπα κωδικοποίησης.
Επεκτασιμότητα: Εάν χρειάζεται να προσθέσετε νέους τύπους απόκρισης ή λογική διαχείρισης εξαιρέσεων, απλώς επεκτείνετε τους υπάρχοντες.