# शुरू से अंत तक एक REST कंट्रोलर बनाना — एडवांस्ड जावा

Source: https://www.geekswithgeeks.com/hi/advanced-java/adv-rest-e2e

> रिक्वेस्ट से रिस्पॉन्स तक एक पूर्ण Spring Web REST endpoint जोड़ें, और देखें Jackson आपके Java ऑब्जेक्ट को JSON में/से कैसे बदलता है।

## रिक्वेस्ट अंदर, रिस्पॉन्स बाहर

`@RequestBody` आने वाले JSON को Java ऑब्जेक्ट में बदलता है; रिटर्न वैल्यू अपने आप JSON में बदल जाती है। `@Valid` मेथड बॉडी चलने से पहले ही DTO पर bean-validation annotation चलाता है।

```java
record CreateOrderRequest(@NotBlank String customerId, @Positive int quantity) {}

@RestController
@RequestMapping("/api/orders")
class OrderController {
    private final OrderService service;
    OrderController(OrderService service) { this.service = service; }

    @PostMapping
    ResponseEntity<Order> create(@Valid @RequestBody CreateOrderRequest req) {
        Order created = service.place(req.customerId(), req.quantity());
        return ResponseEntity.status(HttpStatus.CREATED).body(created);
    }
}
```

## Jackson JSON का काम करता है

Jackson Java फ़ील्ड नामों को परंपरा अनुसार JSON कुंजियों से मैप करता है, nested ऑब्जेक्ट, लिस्ट, `LocalDate`/record अपने आप संभालता है। `@JsonProperty` से JSON कुंजी का नाम बदलें, या `@JsonIgnore` से आंतरिक फ़ील्ड छुपाएँ।

## JSON को अनुकूलित करना

फ़ील्ड-स्तर के annotation कॉलर के लिए API का आकार बदले बिना serialization को नियंत्रित करते हैं।

```java
class UserDto {
    @JsonProperty("user_id")
    Long id;

    String email;

    @JsonIgnore
    String passwordHash;   // never serialized
}
```
