问题描述
我对Swagger.io和Spring Fox还是陌生的。我遇到的问题是,由于某种原因,一个对象未正确引用其模型。
UI中的错误:
错误是因为它最终像这样在JSON中出现:
"schema": {
"$ref": "#/deFinitions/Error-ModelName{namespace='online.staffmanager.backend.auth.model.dto',name='UserChangeSet'}"
}
如果我将其更改为:
"schema": {
"$ref": "#/deFinitions/UserChangeSet"
}
它确实起作用。而且我不知道为什么注释会这样映射它。
我的注释:
@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)))
}
)
SpringFoxConfig:
@Configuration
@EnableSwagger2
@EnableWebMvc
public class SpringFoxConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
}
}
注意:我正在使用Springfox 3.0.0。 预先感谢!
解决方法
您必须再向 Bean 添加一项配置。
这里是需要添加的配置:
.additionalModels(
typeResolver.resolve(TokenInfo.class),typeResolver.resolve(UserChangeSet.class)
)
这是完整的代码:
@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);
}
}
注意:@EnableSwagger2 注解建议在 3.0 版本中移除。您可以参考http://springfox.github.io/springfox/docs/current/#migrating-from-existing-2-x-version
希望能帮到你。