我刚开始使用spring boot并尝试为我正在处理的Web应用程序设置一个swagger文档。当我的端点只需要字符串,列表或其他基本请求体时,它工作得很好但是每当我使用自定义输入时我都会收到此错误:由于无法解析指针而无法解析引用文档the error中不存在
我创建了一个只有一个端点的小项目,可以更轻松地进行搜索。那些是我的招摇依赖:
compile group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2'
compile group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2'
这是swagger配置:
@Configuration
@EnableSwagger2
class SwaggerConfig {
@Bean
Docket productApi() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("io.example.bss.testswagger"))
.paths(any())
.build()
.apiInfo(metaInfo())
}
private ApiInfo metaInfo() {
ApiInfo apiInfo = new ApiInfo(
"API",
"A description",
"0.0.1",
"urn:tos",
new Contact("someone", "https://www.google.com",
"[email protected]"),
"",
"",
new ArrayList<VendorExtension>()
)
return apiInfo
}
}
然后是控制器:
@Controller
class ControllerHello {
@PostMapping("/")
def hello(@RequestBody Profile profile){
return "hello $profile.name $profile.surname, I see you're $profile.age years old"
}
}
最后,DTO:
@ApiModel(value = "the profile containing the name surname and age of a person")
@Document
class Profile {
@ApiModelProperty(notes = "the name of the person", required = true)
String name
@ApiModelProperty(notes = "the surname of the person", required = true)
String surname
@ApiModelProperty(notes = "the age of the person", required = true)
int age
}
在类似的帖子中,有人被建议在Docket中使用alternateTypeRules
,但我不确定它是否适用于我的问题,我不知道如何设置它。
事实证明,swagger-ui遇到了麻烦,因为我的Profile类是用groovy编写的,并且在显示模型时考虑了元类。通过像这样添加这行.ignoredParameterTypes(groovy.lang.MetaClass.class)
解决了这个问题:
@Bean
Docket productApi() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("io.example.bss.testswagger"))
.paths(any())
.build()
.apiInfo(metaInfo())
.ignoredParameterTypes(groovy.lang.MetaClass.class)
}