Skip to content

Added OpenAPI Generator rawBodyMode and object field improved generation handling - #714

Draft
GoodforGod wants to merge 2 commits into
masterfrom
feature/openapi-generator-gen-improvements
Draft

Added OpenAPI Generator rawBodyMode and object field improved generation handling#714
GoodforGod wants to merge 2 commits into
masterfrom
feature/openapi-generator-gen-improvements

Conversation

@GoodforGod

@GoodforGod GoodforGod commented Jul 10, 2026

Copy link
Copy Markdown
Contributor
  • Add rawBodyMode for bare OpenAPI object request/response bodies.
  • Default mode is BYTES, generating byte[] / ByteArray for top-level bare object bodies. RAW mode generates HTTP body abstractions instead: HttpBodyOutput / HttpBodyInput depending on client/server direction.
  • Also keeps nested model object fields as Object / Any, adds HTTP body mappers, and covers Java/Kotlin client/server generation with bare object request/response tests.

Merge after #712


Client:

  @HttpRoute(
      method = "POST",
      path = "/store/raw-object"
  )
  DefaultApiResponses.RawObjectApiResponse rawObject(@Header HttpHeaders additionalHeaders, byte[] body); // or HttpBodyOutput body
 @Generated("io.koraframework.openapi.generator.javagen.ApiResponseGenerator")
  sealed interface RawObjectApiResponse {
    @Generated("io.koraframework.openapi.generator.javagen.ApiResponseGenerator")
    non-sealed interface RawObjectObjectApiResponse extends RawObjectApiResponse {
      byte[] content(); // or HttpBodyInput content

      int statusCode();
    }

    /**
     * Raw object response (status code 200)
     */
    @Generated("io.koraframework.openapi.generator.javagen.ApiResponseGenerator")
    record RawObject200ApiResponse(byte[] content) implements RawObjectObjectApiResponse {
      @Override
      public int statusCode() {
        return 200;
      }
    }

    /**
     * Raw object server error (status code 500)
     */
    @Generated("io.koraframework.openapi.generator.javagen.ApiResponseGenerator")
    record RawObject500ApiResponse(byte[] content) implements RawObjectObjectApiResponse {
      @Override
      public int statusCode() {
        return 500;
      }
    }
  }

Server:

  @HttpRoute(
      method = "POST",
      path = "/store/raw-object"
  )
  DefaultApiResponses.RawObjectApiResponse rawObject(HttpHeaders _headers, byte[] body) throws Exception; // or HttpBodyInput body
  @Generated("io.koraframework.openapi.generator.javagen.ApiResponseGenerator")
  sealed interface RawObjectApiResponse {
    /**
     * Raw object response (status code 200)
     */
    @Generated("io.koraframework.openapi.generator.javagen.ApiResponseGenerator")
    record RawObject200ApiResponse(byte[] content) implements RawObjectApiResponse { // or HttpBodyOutput content
    }

    /**
     * Raw object server error (status code 500)
     */
    @Generated("io.koraframework.openapi.generator.javagen.ApiResponseGenerator")
    record RawObject500ApiResponse(byte[] content) implements RawObjectApiResponse { // or HttpBodyOutput content
    }
  }

@GoodforGod GoodforGod added this to the v2.0.0 milestone Jul 10, 2026
@GoodforGod GoodforGod added new feature New feature request module: openapi Related to Openapi module labels Jul 10, 2026
@github-actions

github-actions Bot commented Jul 10, 2026

Copy link
Copy Markdown

Test Results

726 tests   717 ✅  24m 38s ⏱️
 99 suites    9 💤
 99 files      0 ❌

Results for commit 4fe0df1.

♻️ This comment has been updated with latest results.

@github-actions

Copy link
Copy Markdown

Dependency Vulnerability Report

Found 2 vulnerabilities across 2 coordinates.

Checked 159 Maven coordinates from gradle/libs.versions.toml via OSV.dev.

com.fasterxml.jackson.core:jackson-databind:2.22.0

Aliases: jackson2-databind

  • GHSA-5jmj-h7xm-6q6v, CVE-2026-54515: jackson-databind has case-insensitive deserialization bypasses per-property @JsonIgnoreProperties

io.undertow:undertow-core:2.4.2.Final

Aliases: undertow-core

  • GHSA-3x3v-w654-m28m, CVE-2026-3260: Undertow: Denial of Service via Multipart/Form-Data Parsing on HTTP GET Requests

@github-actions

github-actions Bot commented Jul 10, 2026

Copy link
Copy Markdown

Dependency Update Report

Update level: patch

Found 3 dependency updates.

gradle/libs.versions.toml

  • s3client-aws (software.amazon.awssdk:s3, inline:248): 2.47.5 -> 2.47.6
  • zeebe: 8.9.12 -> 8.9.13
  • kotlin-stdlib: 2.4.0 -> 2.4.10

- Move enum JSON/request mappers into top-level @module factories
- Restore richer OpenAPI javadocs for models, operations, and enums
- Generate record with-methods and top-level mutable optional args
- Add focused OpenAPI fixtures and regression tests
- Default mode is `BYTES`, generating `byte[]` / `ByteArray` for top-level bare object bodies. `RAW` mode generates HTTP body abstractions instead: `HttpBodyOutput` / `HttpBodyInput` depending on client/server direction.
- Also keeps nested model `object` fields as `Object` / `Any`, adds HTTP body mappers, and covers Java/Kotlin client/server generation with bare object request/response tests.
@GoodforGod
GoodforGod force-pushed the feature/openapi-generator-gen-improvements branch from e3354c5 to 4fe0df1 Compare July 21, 2026 12:10
@GoodforGod
GoodforGod marked this pull request as draft July 23, 2026 14:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

module: openapi Related to Openapi module new feature New feature request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant