Hi Pasquale, Thanks for your suggestion. However, I'm afraid that using the `produces()` method at the endpoint level isn't quite what I'm trying to achieve.
My goal is to have different content types for different HTTP response codes within the *same* route, rather than a single content type for all responses from that endpoint. However `produces()` sets the content type for all responses, regardless of the response code, which would not allow me to specify `application/json` for a 201 response and `application/problem+json` for a 400 response from the same REST endpoint. I'm looking for a way to override the response content type *per response code* in the generated OpenAPI spec. Best regards, Laurin On Tue, 14 Oct 2025 at 12:39, Pasquale Congiusti < [email protected]> wrote: > Hello, > I think you can include in each endpoint the `produces()` method to specify > the content type, see doc [1]. Specular to that, there is the consumes() if > you need that too. > > Pasquale. > > [1] > > https://camel.apache.org/components/4.14.x/rest-component.html#_endpoint_query_option_produces > > On Tue, Oct 14, 2025 at 11:31 AM Laurin Niemeyer <[email protected]> > wrote: > > > Hi all, > > > > I’m using Camel’s Rest DSL (with the servlet component) and generating an > > OpenAPI specification via camel-openapi-java-starter > > > > In one of my routes, I’d like to have *different content types for > > different response codes* in the generated OpenAPI spec — specifically: > > > > - > > > > 201 → application/json > > - > > > > 400 → application/problem+json > > > > Here’s a simplified version of my setup: > > > > restConfiguration() > > .component("servlet") > > .bindingMode(RestBindingMode.json) > > .dataFormatProperty("contentTypeHeader", "false") > > .apiContextPath("/openapi"); > > > > And my route: > > > > rest("/v1/public-announcements") > > .post() > > .id("create-public-announcement") > > .type(CreatePublicAnnouncementRequest.class) > > .responseMessage().code(201).message("Created") > > > > .responseModel(CreateIncidentResponse.class).endResponseMessage() > > .responseMessage().code(400).message("Bad Request") > > > .responseModel(ZoneApiErrorMessage.class).endResponseMessage() > > .to("direct:createPublicAnnouncement"); > > > > This works fine at runtime — the HTTP responses have the correct > > Content-Type headers — > > but in the generated OpenAPI spec, both 201 and 400 responses are listed > > with: > > > > "content": { > > "application/json": { ... }} > > > > Is there a way in the Rest DSL or via OpenAPI configuration to override > the > > response content type per response (e.g. make the 400 response use > > application/problem+json)? > > > > Thanks in advance for any pointers! > > — Laurin Niemeyer > > > -- Laurin Niemeyer Fullstack Developer SafeNow GmbH
