इनपुट सत्यापन और त्रुटि प्रबंधन
आने वाले अनुरोधों के लिए डेटा सत्यापन लागू कीजिए और सुदृढ़ त्रुटि प्रबंधन हेतु वैश्विक अपवाद हैंडलर बनाइए।
इनपुट सत्यापन और त्रुटि प्रबंधन, CoddyKit पर Spring Boot 4 की संपूर्ण मार्गदर्शिका का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Spring Boot 4 की संपूर्ण मार्गदर्शिका सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Spring Boot 4 की संपूर्ण मार्गदर्शिका पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
API इनपुट का सत्यापन क्यों करें?
RESTful API बनाते समय क्लाइंट से डेटा प्राप्त करना सामान्य बात है। लेकिन यदि वह डेटा सही न हो तो?
इनपुट सत्यापन यह सुनिश्चित करने की प्रक्रिया है कि आपका API जिस डेटा को प्राप्त करता है, वह संसाधित होने से पहले अपेक्षित नियमों और प्रारूपों के अनुरूप हो। यह इन कारणों से अत्यंत महत्वपूर्ण है:
- डेटा की अखंडता: यह सुनिश्चित करना कि आपके सिस्टम में केवल मान्य डेटा ही प्रवेश करे।
- सुरक्षा: दुर्भावनापूर्ण इनपुट (जैसे SQL इंजेक्शन या XSS) को रोकना।
- विश्वसनीयता: अनुप्रयोग में अप्रत्याशित त्रुटियों और क्रैश से बचना।
Bean सत्यापन की मूल बातें
Spring Boot Jakarta Bean Validation API (JSR 380) के साथ एकीकरण करके सत्यापन को आसान बनाता है। यह मानक एनोटेशन का एक समूह प्रदान करता है, जिनका उपयोग आप सीधे अपने डेटा ऑब्जेक्ट पर सत्यापन नियम परिभाषित करने के लिए कर सकते हैं।
जब Spring किसी मान्य किए गए ऑब्जेक्ट वाले अनुरोध को संसाधित करता है, तो वह इन नियमों की स्वचालित रूप से जाँच करता है। यदि कोई नियम टूटता है, तो वह त्रुटि चिह्नित कर देता है।
सामान्य सत्यापन एनोटेशन
यहाँ कुछ आवश्यक Bean Validation एनोटेशन दिए गए हैं, जिनका आप अक्सर उपयोग करेंगे:
@NotNull: सुनिश्चित करता है कि फ़ील्डnullन हो।@NotBlank: स्ट्रिंग के लिए सुनिश्चित करता है कि वहnullन हो और केवल रिक्त स्थानों से बनी न हो।@NotEmpty: स्ट्रिंग, संग्रह या सरणी के लिए सुनिश्चित करता है कि वहnullन हो और उसमें कम-से-कम एक तत्व या वर्ण हो।@Size(min=X, max=Y): जाँचता है कि स्ट्रिंग या संग्रह का आकार किसी सीमा के भीतर है।@Min(value)/@Max(value): जाँचता है कि संख्यात्मक मान किसी सीमा के भीतर है।@Email: जाँचता है कि स्ट्रिंग सही प्रारूप वाले ईमेल पते के रूप में मान्य है।@Pattern(regexp): नियमित अभिव्यक्ति के आधार पर स्ट्रिंग का सत्यापन करता है।
मान्य DTO बनाना
आइए एक सरल ProductRequest डेटा ट्रांसफ़र ऑब्जेक्ट (DTO) परिभाषित करते हैं, जिसे कोई API प्राप्त कर सकता है। हम इसके फ़ील्ड में कई सत्यापन एनोटेशन जोड़ेंगे।
यह DTO नया उत्पाद बनाने के लिए अपेक्षित संरचना और नियमों को दर्शाता है।
package com.coddykit.dto;
import jakarta.validation.constraints.DecimalMin;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
public class ProductRequest {
@NotBlank(message = "Name cannot be empty")
@Size(min = 3, max = 50, message = "Name must be between 3 and 50 characters")
private String name;
@NotNull(message = "Price cannot be null")
@DecimalMin(value = "0.01", message = "Price must be greater than 0")
private Double price;
@NotBlank(message = "Description cannot be empty")
@Size(max = 200, message = "Description cannot exceed 200 characters")
private String description;
// Getters and Setters (omitted for brevity in snippet)
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public Double getPrice() { return price; }
public void setPrice(Double price) { this.price = price; }
public String getDescription() { return description; }
public void setDescription(String description) { this.description = description; }
}सत्यापन को कार्य करते हुए देखना
हालाँकि Spring नियंत्रकों में सत्यापन अपने-आप संभालता है, फिर भी आप Bean Validation API का मैन्युअल परीक्षण कर सकते हैं। यह प्रोग्राम एक ProductRequest बनाता है और उसके नियमों की जाँच करने के लिए Validator का उपयोग करता है।
ध्यान दें कि उल्लंघनों को कैसे एकत्र किया जाता है!
import com.coddykit.dto.ProductRequest;
import jakarta.validation.ConstraintViolation;
import jakarta.validation.Validation;
import jakarta.validation.Validator;
import jakarta.validation.ValidatorFactory;
import java.util.Set;
public class Main {
public static void main(String[] args) {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
ProductRequest invalidProduct = new ProductRequest();
invalidProduct.setName(" "); // Too short, blank
invalidProduct.setPrice(-5.0); // Less than 0.01
invalidProduct.setDescription("Short");
Set<ConstraintViolation<ProductRequest>> violations =
validator.validate(invalidProduct);
if (!violations.isEmpty()) {
System.out.println("Validation Errors:");
for (ConstraintViolation<ProductRequest> violation : violations) {
System.out.println("- " + violation.getMessage());
}
} else {
System.out.println("Product is valid!");
}
}
}Spring Boot का @Valid एकीकरण
Spring Boot नियंत्रक में, अनुरोध के मुख्य भाग वाले पैरामीटर में केवल @Valid (या @Validated) एनोटेशन जोड़कर सत्यापन सक्रिय किया जाता है। Spring आपके DTO में परिभाषित नियमों को स्वचालित रूप से लागू करता है।
यदि सत्यापन विफल होता है, तो Spring एक MethodArgumentNotValidException उत्पन्न करता है।
package com.coddykit.controller;
import com.coddykit.dto.ProductRequest;
import jakarta.validation.Valid;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ProductController {
@PostMapping("/products")
public ResponseEntity<String> createProduct(@Valid @RequestBody ProductRequest productRequest) {
// If validation passes, this code executes
System.out.println("Received valid product: " + productRequest.getName());
return new ResponseEntity<>("Product created successfully!", HttpStatus.CREATED);
}
}डिफ़ॉल्ट त्रुटि प्रबंधन को समझना
जब किसी नियंत्रक में @Valid विफल होता है, तो Spring Boot का डिफ़ॉल्ट त्रुटि प्रबंधन सक्रिय हो जाता है। यह MethodArgumentNotValidException को पकड़कर 400 Bad Request HTTP स्थिति लौटाता है।
डिफ़ॉल्ट त्रुटि प्रतिक्रिया में आम तौर पर त्रुटि संदेशों, फ़ील्ड नामों और अन्य तकनीकी विवरणों वाला विस्तृत (और अक्सर बहुत लंबा) JSON ऑब्जेक्ट शामिल होता है। यह कार्यात्मक तो है, लेकिन आपके API के उपयोगकर्ताओं के लिए सबसे सुविधाजनक या सुसंगत नहीं भी हो सकता है।
त्रुटि प्रतिक्रियाओं को अनुकूलित करना
बेहतर API अनुभव के लिए, आप त्रुटि प्रतिक्रियाओं को अनुकूलित करना चाहेंगे। इसका अर्थ है:
- सुसंगत प्रारूप: सभी त्रुटियाँ एक जैसी दिखाई दें।
- स्पष्ट संदेश: क्लाइंट के लिए समझना आसान हो।
- प्रासंगिक विवरण: केवल आवश्यक जानकारी दी जाए।
Spring आपके पूरे अनुप्रयोग में त्रुटि प्रबंधन को केंद्रीकृत और अनुकूलित करने के लिए @ControllerAdvice और @ExceptionHandler एनोटेशन प्रदान करता है।
वैश्विक त्रुटि प्रबंधक बनाना
@ControllerAdvice एनोटेशन उस वर्ग को चिह्नित करता है जो किसी भी नियंत्रक से उत्पन्न अपवादों को संभाल सकता है। इसके अंदर, @ExceptionHandler मेथड यह निर्दिष्ट करते हैं कि किन अपवादों को पकड़ना है और कैसे प्रतिक्रिया देनी है।
यहाँ सत्यापन त्रुटियों के लिए एक सरल वैश्विक प्रबंधक बनाने का तरीका बताया गया है, जो विशिष्ट फ़ील्ड त्रुटियों की सूची लौटाता है।
package com.coddykit.exception;
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 java.util.HashMap;
import java.util.Map;
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<Map<String, String>> handleValidationExceptions(
MethodArgumentNotValidException ex) {
Map<String, String> errors = new HashMap<>();
ex.getBindingResult().getAllErrors().forEach(error -> {
String fieldName = ((FieldError) error).getField();
String errorMessage = error.getDefaultMessage();
errors.put(fieldName, errorMessage);
});
return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST);
}
}त्वरित जाँच: सत्यापन और त्रुटियाँ
DTO में किसी स्ट्रिंग फ़ील्ड के लिए सत्यापन नियम परिभाषित करने हेतु निम्नलिखित में से किन एनोटेशन का उपयोग किया जाता है, ताकि यह सुनिश्चित हो कि वह null न हो, खाली न हो और उसकी न्यूनतम लंबाई हो?
पुनरावलोकन: सत्यापन और त्रुटि प्रबंधन
आपने सीखा कि अपने Spring Boot API को मज़बूत कैसे बनाया जाए!
- इनपुट सत्यापन: डेटा की अखंडता और सुरक्षा के लिए आवश्यक, इसके लिए Jakarta Bean Validation API का उपयोग किया जाता है।
- सत्यापन एनोटेशन: अपने DTO में नियम परिभाषित करने के लिए
@NotBlank,@Size,@Min,@Maxआदि का उपयोग करें। @Valid: आपके नियंत्रक मेथड में सत्यापन को स्वचालित रूप से सक्रिय करता है।- कस्टम त्रुटि प्रबंधन: सुसंगत और उपयोगकर्ता-अनुकूल त्रुटि प्रतिक्रियाएँ बनाने के लिए
@ControllerAdviceऔर@ExceptionHandlerका उपयोग करें, विशेष रूप सेMethodArgumentNotValidExceptionके लिए।
अब जानें कि अपने API में अन्य प्रकार के अपवादों को कैसे संभालें!
एआई शिक्षक के साथ Java सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 21
- पाठ
- 84
अक्सर पूछे जाने वाले प्रश्न
क्या “इनपुट सत्यापन और त्रुटि प्रबंधन” पाठ निःशुल्क है?
हाँ — Spring Boot 4 की संपूर्ण मार्गदर्शिका अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “इनपुट सत्यापन और त्रुटि प्रबंधन” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Spring Boot 4 की संपूर्ण मार्गदर्शिका पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“इनपुट सत्यापन और त्रुटि प्रबंधन” में मैं क्या सीखूँगा?
आने वाले अनुरोधों के लिए डेटा सत्यापन लागू कीजिए और सुदृढ़ त्रुटि प्रबंधन हेतु वैश्विक अपवाद हैंडलर बनाइए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Spring Boot 4 की संपूर्ण मार्गदर्शिका का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Spring Boot 4 की संपूर्ण मार्गदर्शिका शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Spring Boot 4 की संपूर्ण मार्गदर्शिका शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“इनपुट सत्यापन और त्रुटि प्रबंधन” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Spring Boot 4 की संपूर्ण मार्गदर्शिका पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Spring Boot 4 की संपूर्ण मार्गदर्शिका पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- REST कंट्रोलर बनाना
- HTTP अनुरोधों और प्रतिक्रियाओं का प्रबंधन
- इनपुट सत्यापन और त्रुटि प्रबंधन
- OpenAPI और Swagger से REST API का दस्तावेज़ीकरण