Моя цель здесь — автоматизировать создание спецификации swagger, чтобы я мог создать на ее основе документ. Вручную мы обычно запускаем наше приложение и получаем доступ к документу swagger API через URL-адрес, чтобы мы могли скопировать спецификацию JSON. Я пробовал различные плагины, но большинство из них глючат. Я выбрал работу вокруг на данный момент. Я воспользовался тестом junit для создания файла JSON.

Ниже приведен код Java, который я использовал для создания спецификации JSON swagger.

/*
   Code generated by IC tool.
   Extreme Logic PH.
   https://www.extremelogic.ph/ic/template/home
 */
package ph.extremelogic.swagger;

import org.apache.commons.io.FileUtils;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

import java.io.File;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;

@SpringBootTest
@AutoConfigureMockMvc
@Disabled
class GenerateSwagger {
    @Autowired
    private WebApplicationContext context;

    private static final String SWAGGER_JSON_FILE = "swagger.json";

    @Test
    public void generateSwagger() throws Exception {
        var mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
        mockMvc
            .perform(MockMvcRequestBuilders.get("/v2/api-docs").accept(MediaType.APPLICATION_JSON))
            .andDo(
                result -> {
                    FileUtils.writeStringToFile(
                        new File(SWAGGER_JSON_FILE),
                        result.getResponse().getContentAsString(),
                        StandardCharsets.UTF_8
                    );
                }
            );
        Assertions.assertTrue(Files.exists(Path.of(SWAGGER_JSON_FILE)));
    }
}

The endpoint /v2/api-docs in your case maybe different, depending on how you had configured you swagger. When running the above code, it will generate the file swagger.json in the root directory of your project.

Также при запуске этого кода запускайте только этот класс, а не весь тест. Вот почему этот класс помечен как @Disabled, чтобы мы случайно не запустили его с другими тестами, на самом деле никакого вреда, если это произойдет. Но это не тестовый класс, мы просто повторно используем эту функцию.

Чтобы запустить приведенный выше код из maven, мы можем использовать следующую команду.

mvn -Dtest=GenerateSwagger#generateSwagger test

Мы можем вызвать это из скрипта bash и все.