无法解析指针:/definitions/Error-ModelName

Max*_*ola 6 swagger swagger-ui spring-boot springfox

我是 Swagger.io 的新手,也是 Spring Fox 的新手。我遇到的问题是,由于某种原因,一个对象没有正确引用其模型。

用户界面中的错误: 在此输入图像描述

错误是因为 JSON 中的结果如下:

"schema": {
"$ref": "#/definitions/Error-ModelName{namespace='online.staffmanager.backend.auth.model.dto', name='UserChangeSet'}"
}
Run Code Online (Sandbox Code Playgroud)

如果我将其更改为:

"schema": {
"$ref": "#/definitions/UserChangeSet"
}
Run Code Online (Sandbox Code Playgroud)

它确实有效。我不知道为什么注释会这样映射。

我的注释:

 @Operation(
            tags = "auth",
            summary = "Create a new User Account",
            responses = {
                    @ApiResponse(
                            responseCode = "200",
                            content = @Content(schema = @Schema(implementation = TokenInfo.class))),
                    @ApiResponse(
                            responseCode = "201",
                            content = @Content(schema = @Schema(implementation = UserChangeSet.class)))
            }
    )
Run Code Online (Sandbox Code Playgroud)

SpringFox配置:

@Configuration
@EnableSwagger2
@EnableWebMvc
public class SpringFoxConfig {

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build();
    }

}
Run Code Online (Sandbox Code Playgroud)

注意:我使用的是Springfox 3.0.0。提前致谢!

Hie*_*yen 9

您必须向 Bean 添加一项配置。

这里是需要添加的配置:

.additionalModels(
     typeResolver.resolve(TokenInfo.class),
     typeResolver.resolve(UserChangeSet.class)
 )
Run Code Online (Sandbox Code Playgroud)

这是完整的代码:

@Configuration
@Import(SpringDataRestConfiguration.class)
public class SwaggerUIConfig {

    @Bean
    public Docket api(TypeResolver typeResolver) {
        return new Docket(DocumentationType.SWAGGER_2)
            .additionalModels(
                    typeResolver.resolve(TokenInfo.class),
                    typeResolver.resolve(UserChangeSet.class)
             )
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.projectname.controllers"))
            .paths(PathSelectors.any())
            .build()
            .useDefaultResponseMessages(false);

     }
}
Run Code Online (Sandbox Code Playgroud)

注意:@EnableSwagger2 注解建议在 3.0 版本中删除。您可以参考http://springfox.github.io/springfox/docs/current/#migration-from-existing-2-x-version

我希望可以帮助你。