spring-mvc-webflux-api-builder
Spring MVC WebFlux API Builder
Source mapping: Tier 1 critical skill derived from Kotlin_Spring_Developer_Pipeline.md (SK-06).
Mission
Produce API code that is not only plausible but correct for the repository's actual Spring stack. Generate endpoints, DTOs, validation, and test scaffolding as one coherent unit.
Decide The Stack First
- Verify whether the module is Spring MVC or WebFlux.
- Verify whether controllers are blocking, coroutine-based, or Reactor-based.
- Verify the project's existing error format, serialization rules, and OpenAPI approach.
- Reuse
project-context-ingestionoutput if it already established these facts.
Design The Contract Before Writing Code
- Define the endpoint path, method, authentication expectation, idempotency rule, and status codes.
- Define request and response DTO boundaries. Do not expose entities directly.
- Define the error model for validation failures, business conflicts, not found, and unexpected errors.
- Define pagination, sorting, and correlation-id behavior if applicable.
- Define whether null, missing, and defaulted fields have distinct semantics.
Generate In This Order
- Request and response DTOs.
- Validation annotations with correct Kotlin
@field:use-site targets. - Controller signature.
- Service interface or use-case boundary.
- Mapping or translation code between transport and domain models.
- Error handling via
@ControllerAdviceor the project's equivalent. - One focused web-layer test proving the contract.
Kotlin-Specific Rules
- Use
@field:targets for Jakarta Bean Validation annotations on constructor properties. - Be explicit about nullable versus required fields.
- Treat
nullversus absent as a contract decision, especially for PATCH-like behavior. - Verify
jackson-module-kotlinor equivalent serialization support before relying on Kotlin constructor defaults. - Prefer immutable DTOs with
valproperties unless the project clearly uses a different pattern.
MVC And WebFlux Rules
- Do not mix MVC and WebFlux styles in the same generated endpoint unless the repository already does so intentionally.
- For MVC, prefer ordinary return types and blocking service boundaries.
- For WebFlux with coroutines, prefer
suspendfunctions andFlow<T>when streaming is required. - For Reactor-based code, follow the project's existing
MonoandFluxconventions instead of inventing a hybrid style.
Advanced Contract Decisions
- Prefer stable machine-readable error codes in the payload even when human-readable messages change.
- Choose
400versus422deliberately. Validation and malformed input are not the same as a domain rule violation. - For create endpoints, decide whether
201 CreatedplusLocationis part of the contract. Do not default to200just because it is easy. - For update endpoints, consider optimistic concurrency signals such as version fields or
ETagandIf-Matchwhen concurrent edits matter. - For PATCH semantics, model three states explicitly when needed: absent, present with value, and present with null. Plain nullable Kotlin fields do not always represent all three.
- Avoid exposing Spring-specific transport types like
Pagedirectly as the public API contract unless the service already standardized on that decision. - Be explicit about date-time, enum, and value-class serialization. Default serializer behavior often drifts across versions and clients.
- In streaming endpoints, consider cancellation, backpressure, and partial-write behavior, not only the method signature.
Expert Heuristics
- Design the error contract and validation contract before controller code. Retrofitting them later causes the most API churn.
- Keep transport DTOs narrow and explicit. Reusing internal domain models usually saves time once and costs time forever.
- If the service is public or long-lived, optimize for backward-compatible contract evolution: additive fields, stable codes, and deliberate deprecations.
- Put correlation-id propagation in filters or interceptors when possible, not in every controller method.
Output Contract
Return either a ready-to-apply patch plan or concrete files or code blocks containing:
- request DTO
- response DTO
- controller
- service interface or use-case entry point
- exception mapping or advice updates
- web-layer test
Also return a short explanation of the API contract decisions that materially affect compatibility.
Guardrails
- Do not leak internal exception details in API errors.
- Do not use validation annotations on the wrong target in Kotlin.
- Do not expose persistence entities on the wire.
- Do not assume default HTTP codes without checking the contract.
- Do not silently pick MVC when the module is WebFlux, or the reverse.
Verification Checklist
- The endpoint compiles against the actual Spring stack in the repository.
- Validation triggers for invalid input and returns the expected error shape.
- Success and at least one failure path are covered by a web-layer test.
- Serialization rules match the existing project conventions.
Quality Bar
A good run of this skill gives the user an endpoint that compiles, validates, serializes, and fails consistently. A bad run mixes frameworks, gets Kotlin validation wrong, or invents an error model that the rest of the service does not use.
More from jetbrains/skills
spring-kotlin-code-review
Review Kotlin + Spring changes for behavioral regressions, transaction and proxy bugs, API and serialization mistakes, persistence risks, security issues, configuration drift, and missing tests. Use when reviewing a PR, diff, patch, or design change where generic style-focused review would miss Spring-specific correctness and operational risks.
4dependency-conflict-resolver
Diagnose and resolve Gradle and Spring classpath conflicts, version drift, and binary incompatibilities in Kotlin applications. Use when `NoSuchMethodError`, `ClassNotFoundException`, linkage errors, duplicate logging bindings, Jackson or Hibernate mismatches, or BOM-versus-explicit-version conflicts appear, and the fix must respect the repository's real version authorities.
3doc
Use when the task involves reading, creating, or editing `.docx` documents, especially when formatting or layout fidelity matters; prefer `python-docx` plus the bundled `scripts/render_docx.py` for visual checks.
3kotlin-spring-proxy-compatibility
Diagnose and prevent Kotlin plus Spring proxy failures around `@Transactional`, `@Cacheable`, `@Async`, method security, retry, configuration proxies, and JPA entity requirements. Use when AOP annotations appear to do nothing, transactional or cache behavior is inconsistent, compiler plugins may be missing, self-invocation is suspected, or Kotlin final-by-default semantics may break Spring behavior.
3ci-cd-containerization-advisor
Design reproducible build, image, and deployment pipelines for Kotlin plus Spring applications, including CI verification, layered containers, rollout safety, and deployment-time migration coordination. Use when creating or improving Dockerfiles, CI workflows, image hardening, Kubernetes manifests, release gates, or deployment strategies for Spring Boot services, especially where build reproducibility and operational safety matter.
3kotlin-idiomatic-refactorer-spring-aware
Refactor Kotlin code toward clearer, more idiomatic design without breaking Spring behavior, serialization, persistence, or public contracts. Use when Java-flavored Kotlin needs cleanup, domain modeling should become more expressive, or boilerplate should be reduced, but the refactoring must remain safe for proxies, Jackson, JPA, configuration binding, and existing tests.
3