पाठ 35 / 38

API स्टेटस कोड व एरर हैंडलिंग

हर परिणाम के लिए सही HTTP स्टेटस लौटाएँ, और कंट्रोलर में try/catch बिखेरने के बजाय एक वैश्विक @ExceptionHandler से एरर रिस्पॉन्स केंद्रीकृत करें।

स्टेटस कोड अनुबंध का हिस्सा हैं

सफलता के लिए 200 OK, 201 Created, 204 No Content; क्लाइंट त्रुटि के लिए 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 409 Conflict; अप्रत्याशित सर्वर विफलता के लिए 500 Internal Server Error

एक वैश्विक exception handler

@RestControllerAdvice हर कंट्रोलर में exception-to-response मैपिंग केंद्रीकृत करता है — किसी कंट्रोलर को try/catch की ज़रूरत नहीं।

@RestControllerAdvice
class ApiExceptionHandler {
    @ExceptionHandler(OrderNotFoundException.class)
    ResponseEntity<ErrorBody> notFound(OrderNotFoundException e) {
        return ResponseEntity.status(HttpStatus.NOT_FOUND)
            .body(new ErrorBody("ORDER_NOT_FOUND", e.getMessage()));
    }

    @ExceptionHandler(MethodArgumentNotValidException.class)
    ResponseEntity<ErrorBody> badInput(MethodArgumentNotValidException e) {
        return ResponseEntity.badRequest()
            .body(new ErrorBody("VALIDATION_ERROR", e.getMessage()));
    }
}

स्टेटस कोड जाँच

त्वरित जाँच: क्लाइंट वैध क्रेडेंशियल भेजता है पर किसी और के ऑर्डर को हटाने की कोशिश करता है। कौन-सा स्टेटस कोड सही है?

  • 401 Unauthorized
  • 404 Not Found
  • 403 Forbidden
  • 500 Internal Server Error
Answer

403 Forbidden — 401 का मतलब क्रेडेंशियल गायब/अमान्य है; यहाँ क्लाइंट प्रमाणित है पर इस resource पर कार्रवाई की अनुमति नहीं — यही 403 है।