Validation & Error Handling

Bean Validation Deep Dive

@Valid, @NotNull, @Size aur Beyond
💡 Bean Validation, EK AIRPORT SECURITY CHECKPOINT hai — HAR PASSENGER (INCOMING DATA) ka SAAMAAN (FIELDS), SPECIFIC RULES (@NotBlank, @Size) ke HISAAB SE, CHECK hota hai, BOARDING GATE (BUSINESS LOGIC) tak, PAHUNCHNE SE PEHLE.

Bean Validation (Jakarta Validation), DECLARATIVE ANNOTATIONS SE, DTO FIELDS PAR, VALIDATION RULES DEFINE karne DETA hai — @NotBlank (STRING, NULL/EMPTY NAHI), @NotNull (NULL NAHI, LEKIN EMPTY STRING OK), @Size(min, max), @Email, @Min/@Max (NUMBERS), @Pattern (REGEX).

Controller mein, @Valid annotation SE, VALIDATION, ENFORCE ki jaati hai — AGAR VALIDATION FAIL hoती hai, Spring, AUTOMATICALLY, MethodArgumentNotValidException THROW karta hai, JO, DEFAULT mein, 400 Bad Request RESPONSE mein, CONVERT ho jaata hai.

public class ProductCreateDto {
    @NotBlank(message = "Name is required")
    private String name;

    @NotNull(message = "Price is required")
    @Positive(message = "Price must be positive")
    private BigDecimal price;

    @Size(max = 500, message = "Description max 500 characters")
    private String description;

    @Email(message = "Invalid email format")
    private String contactEmail;
}

@PostMapping
public ResponseEntity<ProductDto> create(@Valid @RequestBody ProductCreateDto dto) {
    // Agar dto INVALID hai, is METHOD tak PAHUNCHTA hi nahi —
    // Spring AUTOMATICALLY 400 Bad Request return kar deta hai
}
Bean Validation, EK AIRPORT SECURITY CHECKPOINT hai — HAR PASSENGER (INCOMING DATA) ka SAAMAAN (FIELDS), SPECIFIC RULES (@NotBlank, @Size) ke HISAAB SE, CHECK hota hai, BOARDING GATE (BUSINESS LOGIC) tak, PAHUNCHNE SE PEHLE.
1 / 6
⚡ Quick Recap
  • @NotBlank/@NotNull/@Size/@Email/@Positive = COMMON validation annotations
  • @Valid, controller mein, VALIDATION enforce karta hai
  • Invalid data par, AUTOMATICALLY, 400 Bad Request — manual if-checks ki zaroorat NAHI
Is page mein (2 subtopics)

Validation GROUPS SE, SAME DTO ke liye, DIFFERENT SCENARIOS (CREATE vs UPDATE) mein, DIFFERENT RULES, APPLY ki ja sakti hain — jaise, CREATE ke waqt, id, NULL HONA CHAHIYE, UPDATE ke waqt, REQUIRED hai.

@Null(groups = OnCreate.class)
@NotNull(groups = OnUpdate.class)
private Long id;

AGAR, EK DTO ke, ANDAR, EK, DUSRA OBJECT hai (jaise, Address), USKE, FIELDS ko, VALIDATE karne ke liye, PARENT, FIELD PAR, @Valid, ANNOTATION, LAGANA, ZAROORI hai — WARNA, NESTED, OBJECT ki, VALIDATION, SILENTLY, SKIP ho jaati hai.

public class OrderCreateDto {
    @Valid   // BINA ISKE, Address ke fields, VALIDATE NAHI HONGE
    @NotNull
    private AddressDto shippingAddress;
}