ProblemDetail & RFC 7807
RFC 7807, EK INDUSTRY-STANDARD, ERROR RESPONSE FORMAT DEFINE karta hai — type (ERROR TYPE ka URI), title (SHORT, HUMAN-READABLE SUMMARY), status (HTTP STATUS CODE), detail (SPECIFIC, HUMAN-READABLE EXPLANATION), instance (SPECIFIC OCCURRENCE ka URI).
Spring Boot 3.x mein, ProblemDetail CLASS, ISI STANDARD ko, NATIVELY, SUPPORT karti hai — HAR API mein, CUSTOM ERROR FORMAT, INVENT karne ke BAJAYE, EK ESTABLISHED, WIDELY-RECOGNIZED STANDARD, FOLLOW kiya jaata hai.
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
public ProblemDetail handleNotFound(ResourceNotFoundException ex) {
ProblemDetail problem = ProblemDetail.forStatusAndDetail(
HttpStatus.NOT_FOUND, ex.getMessage());
problem.setTitle("Resource Not Found");
problem.setType(URI.create("https://api.example.com/errors/not-found"));
return problem;
}
}
// Response body:
// {
// "type": "https://api.example.com/errors/not-found",
// "title": "Resource Not Found",
// "status": 404,
// "detail": "Product with id 42 not found",
// "instance": "/api/products/42"
// }- RFC 7807 = industry-standard, error response format
- ProblemDetail (Spring Boot 3.x) = NATIVE support, is standard ke liye
- type, title, status, detail, instance = standard fields
ProblemDetail.setProperty("errorCode", "PROD_404"), STANDARD, RFC 7807 FIELDS ke, UPAR, APPLICATION-SPECIFIC, EXTRA, DATA, ADD karne DETA hai — CLIENT, IN, EXTRA, PROPERTIES ko, USE kar sakta hai, BINA, STANDARD, STRUCTURE, BREAK kiye.
ProblemDetail problem = ProblemDetail.forStatusAndDetail(HttpStatus.BAD_REQUEST, "Invalid input");
problem.setProperty("errorCode", "VALIDATION_001");
problem.setProperty("fieldErrors", fieldErrorsMap);ProblemDetail, EK, STANDARD, WELL-KNOWN, FORMAT hai — THIRD-PARTY, CLIENTS ke liye, RECOGNIZABLE hai. CUSTOM, ERROR DTO, MORE, CONTROL DETA hai, LEKIN, HAR, API, APNA, ALAG, FORMAT, INVENT karti hai — BADI, PUBLIC APIs ke liye, ProblemDetail, PREFER kiya jaata hai.
- ProblemDetail = STANDARD, recognizable, third-party friendly
- Custom DTO = MORE control, LEKIN, non-standard