今天有同事用swagger2开发时,有一方法返回Map<String,List<Object>>出现无法解析错误。
Pom.xml引入的swagger版本如下:
<!--swagger start-->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.20</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.1</version>
</dependency>
<!--swagger end-->
具体原因:
swaggerconfig没有默认添加map的复杂结构引起的,需要手动添加。
步骤:
1. 找到swaggerconfig类,在Docket方法里添加一些mapRule即可
2. 这里设计rule比较灵活,我就按标题的格式添加,其中Model.class是自定义的业务类,换成自己的即可。
docket.alternateTypeRules(AlternateTypeRules.newMapRule(String.class, List.class)); docket.alternateTypeRules(AlternateTypeRules.newMapRule(List.class, Model.class));
具体代码如下:
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
Docket docket = new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
.paths(PathSelectors.any())
.build();
docket.alternateTypeRules(AlternateTypeRules.newMapRule(String.class, List.class));
docket.alternateTypeRules(AlternateTypeRules.newMapRule(List.class, Model.class));
return docket;
}
}