تعد معالجة الاستثناءات جزءًا مهمًا من بناء تطبيقات قوية وسهلة الاستخدام. في Spring Boot، يمكننا التعامل مع الاستثناءات بطرق مختلفة لضمان بقاء تطبيقنا مستقرًا وتقديم تعليقات مفيدة للمستخدمين. سيغطي هذا الدليل استراتيجيات مختلفة لمعالجة الاستثناءات، بما في ذلك الاستثناءات المخصصة ومعالجة الاستثناءات العالمية وأخطاء التحقق من الصحة وأفضل ممارسات الإنتاج.
الاستثناءات هي الأحداث التي تعطل التدفق الطبيعي للبرنامج. ويمكن تقسيمها إلى:
يساعد إنشاء فئات استثناءات مخصصة في معالجة حالات خطأ محددة في تطبيقك.
package com.example.SpringBootRefresher.exception; public class DepartmentNotFoundException extends RuntimeException { public DepartmentNotFoundException(String message) { super(message); } }
@ExceptionHandler التعليق التوضيحي:
يمكنك تحديد طرق للتعامل مع الاستثناءات في فئات وحدة التحكم الخاصة بك.
package com.example.SpringBootRefresher.controller; import com.example.SpringBootRefresher.exception.DepartmentNotFoundException; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class DepartmentController { @GetMapping("/department") public String getDepartment() { // Simulate an exception throw new DepartmentNotFoundException("Department not found!"); } @ExceptionHandler(DepartmentNotFoundException.class) public ResponseEntityhandleDepartmentNotFoundException(DepartmentNotFoundException ex) { return new ResponseEntity(ex.getMessage(), HttpStatus.NOT_FOUND); } }
للتعامل مع الاستثناءات عالميًا، يمكنك استخدام @ControllerAdvice ومعالج استثناء مركزي.
package com.example.SpringBootRefresher.error; import com.example.SpringBootRefresher.entity.ErrorMessage; import com.example.SpringBootRefresher.exception.DepartmentNotFoundException; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.context.request.WebRequest; import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; @ControllerAdvice @ResponseStatus public class CustomResponseEntityExceptionHandler extends ResponseEntityExceptionHandler { @ExceptionHandler(DepartmentNotFoundException.class) public ResponseEntityhandleDepartmentNotFoundException(DepartmentNotFoundException exception, WebRequest request) { ErrorMessage message = new ErrorMessage( HttpStatus.NOT_FOUND.value(), exception.getMessage(), request.getDescription(false) ); return ResponseEntity.status(HttpStatus.NOT_FOUND) .body(message); } @ExceptionHandler(Exception.class) public ResponseEntity handleGlobalException(Exception exception, WebRequest request) { ErrorMessage message = new ErrorMessage( HttpStatus.INTERNAL_SERVER_ERROR.value(), exception.getMessage(), request.getDescription(false) ); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(message); } }
حدد فئة الاستجابة للأخطاء القياسية لتنظيم رسائل الخطأ الخاصة بك.
package com.example.SpringBootRefresher.entity; public class ErrorMessage { private int statusCode; private String message; private String description; public ErrorMessage(int statusCode, String message, String description) { this.statusCode = statusCode; this.message = message; this.description = description; } // Getters and setters public int getStatusCode() { return statusCode; } public void setStatusCode(int statusCode) { this.statusCode = statusCode; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } }
يتكامل Spring Boot بشكل جيد مع التحقق من صحة الفول (JSR-380). للتعامل مع أخطاء التحقق من الصحة على مستوى العالم، استخدم @ControllerAdvice.
package com.example.SpringBootRefresher.error; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.validation.FieldError; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.context.request.WebRequest; import java.util.HashMap; import java.util.Map; @ControllerAdvice @ResponseStatus public class ValidationExceptionHandler extends ResponseEntityExceptionHandler { @ExceptionHandler(MethodArgumentNotValidException.class) public ResponseEntity
في الحالات البسيطة، يمكنك إضافة تعليق توضيحي لفئة الاستثناء باستخدام @ResponseStatus لتحديد رمز حالة HTTP.
package com.example.SpringBootRefresher.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; @ResponseStatus(HttpStatus.NOT_FOUND) public class DepartmentNotFoundException extends RuntimeException { public DepartmentNotFoundException(String message) { super(message); } }
تتضمن معالجة الاستثناءات في Spring Boot استخدام التعليقات التوضيحية مثل @ExceptionHandler و@ControllerAdvice و@ResponseStatus لإدارة الأخطاء بشكل فعال. من خلال إنشاء استثناءات مخصصة، ومعالجة أخطاء التحقق من الصحة، واتباع أفضل الممارسات، يمكنك إنشاء تطبيقات قوية تتعامل مع الأخطاء بأمان وتقدم تعليقات مفيدة للمستخدمين. يضمن استخدام ميزات Java 17 أن يستفيد تطبيقك من أحدث التحسينات في نظام Java البيئي.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3