当前位置:首页 > 服务端 > dubbo2.7+如何集成swagger

dubbo2.7+如何集成swagger

2022年11月07日 15:59:10服务端8

这里写自定义目录标题


dubbo2.7+包名从com.alibaba换成了org.apache。 https://github.com/Sayi/swagger-dubbo 的version2.0.1 不兼容dubbo2.7+,包中引用了是dubbo2.6包。
dubbo2.7集成swagger,需要将swagger-dubbo2.0.1中类引用修改下,还需将ReferenceManager类中contexts改为大写CONTEXTS

原配置:

<dependency>
			<groupId>io.swagger</groupId>
			<artifactId>swagger-core</artifactId>
			<version>1.5.16</version>
		</dependency>

		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<version>2.6.0</version>
			<scope>provided</scope>
			<exclusions>
				<exclusion>
					<groupId>org.springframework</groupId>
					<artifactId>spring</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

修改后

<dependency>
			<groupId>io.swagger</groupId>
			<artifactId>swagger-core</artifactId>
			<version>1.5.20</version>
		</dependency>

		<dependency>
			<groupId>org.apache.dubbo</groupId>
			<artifactId>dubbo</artifactId>
			<version>2.7.0</version>
			<scope>provided</scope>
			<exclusions>
				<exclusion>
					<groupId>org.springframework</groupId>
					<artifactId>spring</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

DubboPropertyConfig类
import com.alibaba.dubbo.config.ApplicationConfig;
改为
import org.apache.dubbo.config.ApplicationConfig;

ReferenceManager类
import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ReferenceConfig;
import com.alibaba.dubbo.config.spring.ServiceBean;
import com.alibaba.dubbo.config.spring.extension.SpringExtensionFactory;
改为
import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ReferenceConfig;
import org.apache.dubbo.config.spring.ServiceBean;
import org.apache.dubbo.config.spring.extension.SpringExtensionFactory;

public Object getProxy(String interfaceClass) {
        Set<Entry<Class<?>, Object>> entrySet = interfaceMapProxy.entrySet();
        for (Entry<Class<?>, Object> entry : entrySet) {
            if (entry.getKey().getName().equals(interfaceClass)) { return entry.getValue(); }
        }

        for (ServiceBean<?> service : services) {
            if (interfaceClass.equals(service.getInterfaceClass().getName())) {
                ReferenceConfig<Object> reference = new ReferenceConfig<Object>();
                reference.setApplication(service.getApplication());
                reference.setRegistry(service.getRegistry());
                reference.setRegistries(service.getRegistries());
                reference.setInterface(service.getInterfaceClass());
                reference.setVersion(service.getVersion());
                interfaceMapProxy.put(service.getInterfaceClass(), reference.get());
                return reference.get();
            }
        }
        return null;
    }

改为

public Object getProxy(String interfaceClass) {
        Set<Entry<Class<?>, Object>> entrySet = interfaceMapProxy.entrySet();
        for (Entry<Class<?>, Object> entry : entrySet) {
            if (entry.getKey().getName().equals(interfaceClass)) { return entry.getValue(); }
        }

        for (ServiceBean<?> service : services) {
            if (interfaceClass.equals(service.getInterfaceClass().getName())) {
                ReferenceConfig<Object> reference = new ReferenceConfig<Object>();
                reference.setApplication(service.getApplication());
                reference.setRegistry(service.getRegistry());
                reference.setRegistries(service.getRegistries());
                reference.setInterface(service.getInterfaceClass());

                reference.setVersion(service.getVersion());
                reference.setGroup(service.getGroup());
                reference.setRetries(service.getRetries());
                reference.setActives(service.getActives());
                reference.setCache(service.getCache());
                // 集群方式
                reference.setCluster(service.getCluster());
                reference.setLayer(service.getLayer());
                reference.setTimeout(service.getTimeout());
                reference.setConnections(service.getConnections());
                // 负载均衡策略
                reference.setLoadbalance(service.getLoadbalance());
                interfaceMapProxy.put(service.getInterfaceClass(), reference.get());
                return reference.get();
            }
        }
        return null;
    }

最重要的是:ReferenceManager类中
Field field = SpringExtensionFactory.class.getDeclaredField(“contexts”);
改为
Field field = SpringExtensionFactory.class.getDeclaredField(“CONTEXTS”);

然后将项目打包,按照https://github.com/Sayi/swagger-dubbo的配置
简单修改后:https://github.com/hjnjmjkj/swagger-dubbo.git

参考链接:Dubbo微服务基于swagger自动生成文档及测试调用

作者:hjnjmjkj
来源链接:https://blog.csdn.net/hjnjmjkj/article/details/93591143

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/68322.html

标签: DubboSwagger
分享给朋友:

“dubbo2.7+如何集成swagger” 的相关文章

使用dropwizard(5)--加入swagger

使用dropwizard(5)--加入swagger

前言 Swagger已经成API service的规范了,本处在dropwizard中简单集成Swagger. Demo source https://github.com/Ryan-Miao/l4dropwizard 本文是基于dropwizard入...

配置 Swagger 带 token 访问的两种方式

配置 Swagger 带 token 访问的两种方式

推荐使用全局的方式 1. 每个接口单独传 import com.google.common.collect.Lists; import org.springframework.beans.factory.annotation.Value; impo...

.NET Core和Swagger 生成 Api 文档

.NET Core和Swagger 生成 Api 文档

测试/生产环境的BUG 这里更新一下在本地调试正常,在INT/PROD上抛错,错误信息为: /**/.xml(Swagger json file) 文件找不到,在startup 里builder 的时候抛出错误。 解决方案: 编辑.csproj文件,修改输出路径...

springmvc+swagger构建Restful风格文档

springmvc+swagger构建Restful风格文档

  本次和大家分享的是java方面的springmvc来构建的webapi接口+swagger文档;上篇文章分享.net的webapi用swagger来构建文档,因为有朋友问了为啥.net有docpage文档你还用swagger,这里主要目的是让接口文档统一,当操作多种开发语言做接口时...

swagger基本使用指南

Maven依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId>...

【Swagger】可能是目前最好的 Spring Boot 集成 swagger 的方案

【Swagger】可能是目前最好的 Spring Boot 集成 swagger 的方案

【Swagger】可能是目前最好的Spring Boot集成 swagger 的方案 ![](https://img2018.cnblogs.com/blog/746311/201909/746311-20190908162326923-1865614206.jpg)...

【swagger】2.swagger提供开发者文档--返回统一格式篇【spring mvc】【spring boot】

【swagger】2.swagger提供开发者文档--返回统一格式篇【spring mvc】【spring boot】

接着上一篇来说, 不管正常返回结果还是后台出现异常,应该返回给前台统一的响应格式。 所以这一篇就为了应对解决这个问题。 ========================================================================...

Springboot系列(七) 集成接口文档swagger,使用,测试

Springboot系列(七) 集成接口文档swagger,使用,测试

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新 Springboot 配置接口文档swagger 往期推荐 SpringBoot系列(一)...

spring 与 swagger 2 的整合

 Spring 与 Swagger 2 的 结合 环境 : Maven 工程 , 已具备web项目的基本配置(包扫描之类) 1、引用swagger 的 依赖 :        <dependenc...

Springfox与swagger的整合使用与关系

Springfox与swagger的整合使用与关系

一、前言 让我们先理一下springfox与swagger的关系。 swagger是一个流行的API开发框架,这个框架以“开放API声明”(OpenAPI Specification,OAS)为基础,对整个API的开发周期都提供了相应的解决方案,是一个非常庞大的项目(包括设...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。