Swagger2Markup:在测试中使用Swagger远程端点时如何按标签分组?

时间:2016-09-26 09:53:53

标签: maven spring-mvc swagger springfox spring-restdocs

我正在使用优秀的swagger2markup插件为Swagger提供的REST API生成Asciidoc文档。我跟着swagger2markup documentation并且我正在使用Spring MVC集成测试来生成我的Springfox Swagger端点的标记(我正在使用Maven):

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = { AppConfig.class, SwaggerConfig.class })
public class DocumentationIT {

    protected MockMvc mockMvc;

    @Autowired
    protected WebApplicationContext webApplicationContext;

    @Rule
    public JUnitRestDocumentation restDocumentation = new JUnitRestDocumentation("src/docs/asciidoc/apidoc/generated-snippets");

    @Before
    public void setUp(){
        this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
                .apply(documentationConfiguration(this.restDocumentation))
                .build();
    }

    @Test
    public void convertSwaggerToAsciiDoc() throws Exception {
        this.mockMvc.perform(get("/v2/api-docs")
                .accept(MediaType.APPLICATION_JSON))
                .andDo(
                        Swagger2MarkupResultHandler
                                .outputDirectory("src/docs/asciidoc/apidoc")
                                .withExamples("src/docs/asciidoc/apidoc/generated-snippets").build())
                .andExpect(status().isOk());
    }
}

一切都运行良好,我的所有路径都在我的最终文档中,但是路径都直接出现在根目录中,而不是按资源分组(即通过控制器),所以Method 1来自Controller 1的{​​{1}}与Method 2的{​​{1}}相同。

我的输出:

enter image description here

我想要的是什么:

enter image description here

从我所看到的情况来看,当使用本swagger2-markup Maven project template中的本地文件生成时,您可以指定一个属性来告诉swagger2markup使用config属性Controller 2按标记对路径进行分组,但是在测试中使用<swagger2markup.pathsGroupedBy>TAGS</swagger2markup.pathsGroupedBy>时似乎不是这样的配置。唯一的选择是Swagger2MarkupResultHandler,但没有withMarkupLanguage()方法...

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:2)

正如您所提到的,swagger2Markup提供了一个swagger2markup.pathsGroupedBy属性来指定路径的分组方式。但是,Swagger2MarkupResultHandler不提供API来支持配置。

根据Swagger2Markup API

  

Swagger2Markup的属性在类中定义   io.github.swagger2markup.Swagger2MarkupProperties。属性是   按以下顺序考虑:

     
      
  1. Java系统属性

  2.   
  3. 自定义属性

  4.   
  5. 默认属性(包含在Swagger2Markup中)

  6.   

可以使用系统属性对其进行配置。因此,您可以在测试中将swagger2markup.pathsGroupedBy的系统属性设置为TAGS

如果您希望使用Java API对其进行配置,则可以使用Swagger2MarkupResultHandler API扩展Swagger2MarkupConfigBuilder并覆盖handle方法。