前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >代码自动生成文档 - Springfox(Swagger2)

代码自动生成文档 - Springfox(Swagger2)

作者头像
十毛
发布2019-03-27 11:47:08
1.5K0
发布2019-03-27 11:47:08
举报

效果如下图

1526906083_67_w1094_h971.png

接入Springfox的过程如下

引入Jar包

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.8.0</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.8.0</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.8.11</version>
</dependency>

配置Swagger静态资源

<!-- SwaggerUI静态资源配置-->
    <mvc:default-servlet-handler/>
    <mvc:resources location="classpath:/META-INF/resources/" mapping="swagger-ui.html"/>
    <mvc:resources location="classpath:/META-INF/resources/webjars/springfox-swagger-ui/"
                   mapping="webjars/springfox-swagger-ui/**"/>

Swagger配置信息

配置信息是一个Spring Bean

@Configuration
@EnableSwagger2
@EnableWebMvc  //这个注解spring4.0+用
//@ConditionalOnProperty(name = "swagger.open", havingValue = "true")这个配置主要为了生产环境不生成swagger文档
public class SwaggerConfiguration {
    @Bean
    public Docket createRestApi() {
        Set<String> producesList = new HashSet<>();
        producesList.add("application/json");
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .produces(producesList)
                .select()
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                .paths(PathSelectors.any())
                .build();
    }

    //文档信息说明和个人信息配置
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("智能客服")
                .description("智能客服API")
                .contact(new Contact("timxia", "", "timxia@tencent.com"))
                .version("1.0")
                .build();
    }
}

接口标注

@Api(description = "平台操作员接口")
@RequestMapping("api/adminUsers")
@RestController
public class AdminUserController {
    @Resource
    private AdminUserService adminUserService;

    @ApiOperation(value = "创建平台操作员", produces = "application/json")
    @RequestMapping(value = {"", "/"}, method = RequestMethod.POST)
    public WebResult createAdminUser(@ApiIgnore @ModelAttribute Session session,
                                     @ApiParam("平台操作员") @RequestBody AdminUser adminUser) {
         return WebResult.SUCCESS;
    }
}

完成

完成以上步骤后,启动项目后可以在浏览器中打开连接http://localhost:18080/swagger-ui.html,则可以看到接口文档,并且可以直接测试接口(参考第一幅图)

常见问题

  1. 使用Spring MVC实现Restful时,我们经常使用GsonHttpMessageConverter来把对象转换为Json字符串作为API返回值,如果使用GsonHttpMessageConverter,则会出现下面这种没有数据的情况:

出现上述错误的原因是Gson把springfox.documentation.spring.web.json.Json转换为Json时,会多出一个Value层(如上图),解决办法就是定制对该类型的转换规则。 自定义转换规则如下:

import com.google.gson.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.GsonHttpMessageConverter;
import springfox.documentation.spring.web.json.Json;

@Configuration
public class HttpMessageConverterConfig {

    @Bean
    public GsonHttpMessageConverter gsonHttpMessageConverter() {
        GsonHttpMessageConverter converter = new GsonHttpMessageConverter();
        converter.setGson(new GsonBuilder().registerTypeAdapter(Json.class, new SpringfoxJsonToGsonAdapter()).create());
        return converter;
    }
}
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import springfox.documentation.spring.web.json.Json;

import java.lang.reflect.Type;

public class SpringfoxJsonToGsonAdapter implements JsonSerializer<Json> {

    @Override
    public JsonElement serialize(Json json, Type type, JsonSerializationContext context) {
        final JsonParser parser = new JsonParser();
        return parser.parse(json.value());
    }
}

按照上述配置后api-docs接口就可以正常返回数据了

参考文献

  1. springfox(swagger2) does not work with GsonHttpMessageConverterConfig

如果对你有一点帮助,麻烦为我点一个赞,如果没有帮助,也非常期待你的反馈

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.06.22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 接入Springfox的过程如下
    • 引入Jar包
      • 配置Swagger静态资源
        • Swagger配置信息
          • 接口标注
            • 完成
              • 常见问题
                • 参考文献
                相关产品与服务
                对话机器人
                对话机器人(Conversation Robot,ICR),是基于人工智能技术,面向企业场景的 AI 服务,可应用于智能客服、服务咨询、业务办理等场景。本产品旨在帮助企业快速构建,满足自身业务诉求的对话机器人,从而减少企业人力成本或解决服务不及时问题。用户可通过对话机器人用户端引擎,实现高准确率的对话服务。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档