Philip Kesel US
Philip Kesel US

Reputation: 23

How to get SpringDoc generated OpenAPI within the service

In a Spring Boot Web MVC REST service I want to use the operation ID and path values from SpringDoc generated OpenAPI from within the service where its generated. How can I get the OpenAPI JSON doc without going through the web endpoint?

Upvotes: 2

Views: 1264

Answers (1)

xPiL0Tx
xPiL0Tx

Reputation: 111

If I understand you correctly:
You want to get OpenAPI documentation in JSON format inside code your Spring application.

I do it this way:
1.) Create a component that extends from the OpenApiResource class.
And create a getOpenApiJson method that calls getOpenApi() (creating or receiving an OpenApi model) and writeJsonValue() (serialization of OpenAPI).

@Component
public class CustomOpenApiResource extends OpenApiResource {


    public CustomOpenApiResource(ObjectFactory<OpenAPIService> openAPIBuilderObjectFactory,
                                 AbstractRequestService requestBuilder,
                                 GenericResponseService responseBuilder,
                                 OperationService operationParser,
                                 Optional<List<OperationCustomizer>> operationCustomizers,
                                 Optional<List<OpenApiCustomiser>> openApiCustomisers,
                                 Optional<List<OpenApiMethodFilter>> methodFilters,
                                 SpringDocConfigProperties springDocConfigProperties,
                                 SpringDocProviders springDocProviders) {
        super(openAPIBuilderObjectFactory,
                requestBuilder,
                responseBuilder,
                operationParser,
                operationCustomizers,
                openApiCustomisers,
                methodFilters,
                springDocConfigProperties,
                springDocProviders);
    }


    @Override
    protected String getServerUrl(HttpServletRequest request, String apiDocsUrl) {
        /**
         * How to implement this method you can find out for example from OpenApiWebMvcResource
         */
        return "";
    }

    public String getOpenApiJson() throws JsonProcessingException {
        return writeJsonValue(getOpenApi(Locale.getDefault()));
    }
}

2.) Inject CustomOpenApiResource component

    @Autowired
    private CustomOpenApiResource resource;

And use getOpenApiJson()

    String openApiJson = resource.getOpenApiJson();

Upvotes: 3

Related Questions