动态生成swagger在线接口文档

最近公司在弄一个配置化接口平台,以达到低代码,需要为接口提供动态生成的swagger在线文档,接口描述信息记录在数据库内。经过阅读浏览多篇文章,入坑n次,终于得到可行的解决方案,以下分享给各位小伙伴。

方案一:实现ApiListingScannerPlugin,重写apply方法,缺点:每次更新数据库描述信息,需要重启微服务

package com.newpearl.core.service.config;

import com.fasterxml.classmate.TypeResolver;
import com.newpearl.common.dto.Result;
import com.newpearl.common.util.StringUtil;
import com.newpearl.core.api.model.inf.InfApiGroup;
import com.newpearl.core.api.model.inf.InfApiParameter;
import com.newpearl.core.api.model.inf.InfApiSetting;
import com.newpearl.core.biz.dao.inf.InfApiGroupDao;
import com.newpearl.core.biz.dao.inf.InfApiParameterDao;
import com.newpearl.core.biz.dao.inf.InfApiSettingDao;
import org.apache.commons.compress.utils.Sets;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import springfox.documentation.builders.OperationBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.ResponseMessageBuilder;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.schema.ModelReference;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.ApiListingScannerPlugin;
import springfox.documentation.spi.service.contexts.DocumentationContext;
import springfox.documentation.spring.web.readers.operation.CachingOperationNameGenerator;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;

/**
 * 手动将配置化接口注册到Swagger中,在Swagger-UI才能展示,方便调用。
 *
 * @author tao
 * @Date 2022年8月1日16:02:50
 */
@Component
public class OpenPlatformSwaggerApis implements ApiListingScannerPlugin {

    @Autowired
    private InfApiGroupDao apiGroupDao;

    @Autowired
    private InfApiSettingDao apiSettingDao;

    @Autowired
    private InfApiParameterDao apiParameterDao;

    @Override
    public List<ApiDescription> apply(DocumentationContext documentationContext) {
        String tagName = "配置化接口开放平台";
//        documentationContext.getTags().add(new Tag(tagName, "Open Platform Controller"));
        List<InfApiSetting> apiSettingList = apiSettingDao.findAll(false);
        List<ApiDescription> apiDescriptionList = new ArrayList<>();
        //接口配置
        for (InfApiSetting apiInfo : apiSettingList) {
            List<InfApiParameter> parameterList = apiParameterDao.findByApiCode(apiInfo.getApiCode());
            List<Parameter> apiParaList = new ArrayList<>();
            //接口参数
            for (InfApiParameter parameter : parameterList) {
                if (parameter.getOutput() != null && parameter.isOutput()) {
                    continue;
                }
                Parameter para = new ParameterBuilder()
                        .name(StringUtil.isEmpty(parameter.getParaFieldOtherName()) ? parameter.getParaField() : parameter.getParaFieldOtherName())
                        .description(StringUtil.isEmpty(parameter.getMemo()) ? parameter.getParaField() : parameter.get
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值