Hello,

We are using the REST OpenApi to publish rest services from a OAS (as
a consumer).

The OAS spec specifies that error responses, such as 400, 404 and so
on, should have a JSON body
that follows a specific schema.

Using a `RestClientRequestValidator` implementation we can achive this
for client request validation errors.

However when/if the client requests a path or a method on a path that
is not present in the OAS,
then there does not seem to be anyway to hook in and change the response body.

https://github.com/apache/camel/blob/main/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiProcessor.java#L128-L142

I would like to propose adding a new SPI, following the same pattern
as `RestClientRequestValidator` to make it possible to change the
response
produced when there is no match for the operation in the OAS.

My proposal is to create a new interface

```
public interface RestOpenApiUnmatchedRequestHandler {
    /**
     * Handles the incoming request that did not match any operation
in the OpenAPI specification.
     *
     * @param exchange       the current exchange
     * @param statusCode     the HTTP status code (404 or 405)
     * @param allowedMethods the list of allowed HTTP methods for the
requested path (empty for 404)
     */
    void handle(Exchange exchange, int statusCode, List<String> allowedMethods);
}
```

And also a default handler that implements the current behaviour.

Does this sound like a resonable change ? If so I would be happy to
open a Jira issue and provide a PR with my proposed changes.

Best regards
Pontus Ullgren

Reply via email to