spring-webfluxlisted
Install: claude install-skill taipt1504/claudehut
# Spring WebFlux
Reactive endpoints via RouterFunctions + Handlers. Prefer over `@RestController` in WebFlux for testability.
## Quick start (Handler + RouterFunction)
```java
@Component
@RequiredArgsConstructor
public class UserHandler {
private final UserService service;
public Mono<ServerResponse> create(ServerRequest req) {
return req.bodyToMono(CreateUserRequest.class)
.flatMap(service::create)
.flatMap(user -> ServerResponse.status(HttpStatus.CREATED).bodyValue(user));
}
public Mono<ServerResponse> get(ServerRequest req) {
String id = req.pathVariable("id");
return service.findById(id)
.flatMap(user -> ServerResponse.ok().bodyValue(user))
.switchIfEmpty(ServerResponse.notFound().build());
}
}
@Configuration
public class UserRouterConfig {
@Bean
public RouterFunction<ServerResponse> userRoutes(UserHandler h) {
return RouterFunctions.route()
.path("/users", b -> b
.GET("/{id}", h::get)
.POST("", accept(MediaType.APPLICATION_JSON), h::create))
.build();
}
}
```
Detailed: `references/router-handler-pattern.md`, `references/schedulers.md`, `references/context-propagation.md`, `references/stepverifier-testing.md`, `references/anti-patterns.md`.
## Assets
- `assets/templates/Handler.java.tmpl`
- `assets/templates/RouterConfig.java.tmpl`
## Hard rules
- NEVER `.block()` in reactive chain. NEVER `Thread