-
-
Notifications
You must be signed in to change notification settings - Fork 504
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
The operationId is unnecessarily deduplicated for a requestBody with multiple content types #2646
Labels
enhancement
New feature or request
Comments
Hello, |
Here is a customizer that can circumvent the issue until resolved but then, be careful, it removes any deduplication capabilities: @Component
public class PreserveOperationIdOpenApiCustomizer implements GlobalOperationCustomizer {
@Override
public Operation customize(Operation operation, HandlerMethod handlerMethod) {
operation.setOperationId(
Optional
.ofNullable(handlerMethod.getMethodAnnotation(io.swagger.v3.oas.annotations.Operation.class))
.map(io.swagger.v3.oas.annotations.Operation::operationId)
.orElseGet(handlerMethod.getMethod()::getName)
);
return operation;
}
} |
I ended up with a less aggressive customizer: @Override
public Operation customize(Operation operation, HandlerMethod handlerMethod) {
Optional
.ofNullable(handlerMethod.getMethodAnnotation(io.swagger.v3.oas.annotations.Operation.class))
.map(io.swagger.v3.oas.annotations.Operation::operationId)
.ifPresent(operation::setOperationId);
return operation;
} |
Thank you, I'll look forward to the next release. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Describe the bug
In a Spring Boot RestController that wants to support POST request bodies of both form data or JSON,
to use the built-in functionality, multiple endpoint methods must be used to support both content types.
The JSON accepting method expects the Spring MVC
@RequestBody
annotation to be used,while the form data version expects Spring MVC
@RequestBody
to not be used, so the Swagger annotation must be used instead.Although the output OpenAPI JSON correctly puts the two as the same request body with different supported content, the operationId is incorrectly deduplicated, changing its value.
n.b. This does require the operationId to be set explicitly on both methods, because otherwise the last automatically generated operationId will be picked to represent both methods.
To Reproduce
3.3.1
springdoc-openapi-starter-webmvc-api version 2.6.0,
creating OpenAPI version 3.0.1 JSON.
Actual (snippet):
Expected the same except:
Expected behavior
The text was updated successfully, but these errors were encountered: