0Pricing
Spring Boot 4 Microservices & REST APIs · Pelajaran

Controller Reaktif

Bangun endpoint nonblokir dengan WebFlux.

Controller Reaktif adalah pelajaran Spring Boot 4 Microservices & REST APIs gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Spring Boot 4 Microservices & REST APIs, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Spring Boot 4 Microservices & REST APIs mencakup 4 pelajaran total.

Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.

Reactive Web Endpoints

With WebFlux you write @RestController classes just like in Spring MVC, but methods return reactive types instead of plain objects.

  • Return Mono<T> for a single resource
  • Return Flux<T> for a collection or stream

Returning a Mono

A handler returning Mono resolves to a single JSON object. The framework subscribes for you.

@RestController
@RequestMapping("/users")
public class UserController {
    @GetMapping("/{id}")
    public Mono<User> getUser(@PathVariable String id) {
        return userService.findById(id);
    }
}

Returning a Flux

A handler returning Flux serializes to a JSON array by default.

@GetMapping
public Flux<User> getAllUsers() {
    return userService.findAll();
}

No Blocking Allowed

Inside reactive handlers you must not call blocking code. Return the publisher and let the chain stay reactive.

// BAD: blocks the event loop
@GetMapping("/bad")
public User bad() {
    return userService.findById("1").block();
}

// GOOD: stays reactive
@GetMapping("/good")
public Mono<User> good() {
    return userService.findById("1");
}

Path and Query Params

Binding annotations work the same as in MVC: @PathVariable, @RequestParam, and @RequestBody.

@GetMapping("/search")
public Flux<User> search(@RequestParam String name) {
    return userService.findByName(name);
}

Accepting a Reactive Body

A POST handler can accept a Mono request body, keeping the whole flow non-blocking.

@PostMapping
public Mono<User> create(@RequestBody Mono<User> body) {
    return body.flatMap(userService::save);
}

Setting Status Codes

Use @ResponseStatus or wrap results in ResponseEntity within a Mono.

@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public Mono<User> create(@RequestBody Mono<User> body) {
    return body.flatMap(userService::save);
}

ResponseEntity in a Mono

To control headers and status dynamically, return Mono<ResponseEntity<T>>.

@GetMapping("/{id}")
public Mono<ResponseEntity<User>> getUser(@PathVariable String id) {
    return userService.findById(id)
        .map(ResponseEntity::ok)
        .defaultIfEmpty(ResponseEntity.notFound().build());
}

Streaming with Server-Sent Events

Set the content type to text/event-stream to stream a Flux to the client over time.

@GetMapping(value = "/stream",
    produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<Long> stream() {
    return Flux.interval(Duration.ofSeconds(1));
}

Error Handling

Use onErrorResume to map errors to a fallback publisher, or a @ControllerAdvice for global handling.

@GetMapping("/{id}")
public Mono<User> getUser(@PathVariable String id) {
    return userService.findById(id)
        .onErrorResume(e -> Mono.error(
            new ResponseStatusException(HttpStatus.NOT_FOUND)));
}

The Netty Server

WebFlux runs on Netty by default — an event-loop server with a small fixed thread pool. This is why blocking calls are so harmful: blocking one thread stalls many requests.

Quick Check

Test your understanding of reactive controllers.

Recap

You learned how to build reactive endpoints:

  • @RestController methods return Mono or Flux
  • Never call block() inside a handler
  • Use ResponseEntity in a Mono for dynamic status
  • Stream with text/event-stream

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Controller Reaktif” gratis?

Ya — teks lengkap “Controller Reaktif” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Spring Boot 4 Microservices & REST APIs, upgrade ke CoddyKit PRO. Kursus Spring Boot 4 Microservices & REST APIs mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Controller Reaktif”?

Bangun endpoint nonblokir dengan WebFlux. Kamu berlatih Spring Boot 4 Microservices & REST APIs dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Spring Boot 4 Microservices & REST APIs?

Tidak diperlukan pengalaman sebelumnya. Spring Boot 4 Microservices & REST APIs di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Controller Reaktif” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Spring Boot 4 Microservices & REST APIs ini?

Ya. Setiap pelajaran Spring Boot 4 Microservices & REST APIs menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Dasar-Dasar Mono dan Flux
  2. Controller Reaktif
  3. WebClient untuk Pemanggilan Reaktif
  4. Backpressure dan Operator
← Kembali ke Spring Boot 4 Microservices & REST APIs