接口文档生成方法及装置、电子设备及可读存储介质

文档序号:1815548 发布日期:2021-11-09 浏览:33次 >En<

阅读说明:本技术 接口文档生成方法及装置、电子设备及可读存储介质 (Interface document generation method and device, electronic equipment and readable storage medium ) 是由 江日念 牟宗彦 武涛 于 2021-06-30 设计创作,主要内容包括:本发明公开了一种接口文档生成方法及装置、电子设备及可读存储介质。其中,该方法包括:在目标应用程序所处系统环境的环境配置参数与接口文档的环境配置参数匹配的情况下,对目标应用程序中各个对象进行遍历,来确定自定义对象,其中,自定义对象中存在自定义方法,自定义方法为存在自定义注解的方法;对各个自定义方法进行解析,以得到接口文档参数;根据接口文档参数生成目标应用程序对应的接口文档。本发明解决了由于相关技术中Swagger支持的接口单一,需要人工干预才能调用其他接口,而导致接口适配性低、人力资源浪费的技术问题。(The invention discloses an interface document generation method and device, electronic equipment and a readable storage medium. Wherein, the method comprises the following steps: under the condition that the environmental configuration parameters of the system environment where the target application program is located are matched with the environmental configuration parameters of the interface document, traversing each object in the target application program to determine a custom object, wherein a custom method exists in the custom object, and the custom method is a method with custom annotation; analyzing each user-defined method to obtain interface document parameters; and generating an interface document corresponding to the target application program according to the interface document parameters. The invention solves the technical problems of low interface adaptability and waste of human resources caused by the fact that other interfaces can be called only by manual intervention because the interfaces supported by the Swagger in the related technology are single.)

接口文档生成方法及装置、电子设备及可读存储介质

技术领域

本发明涉及数据库技术领域,具体而言,涉及一种接口文档生成方法及装置、电子设备及可读存储介质。

背景技术

在应用程序的日常开发、测试、运维过程中,需要查询应用程序服务的接口文档,并进行接口调用,通过工具,将系统中的接口在local/test/ST环境暴露出来,为了方便使用,工具要满足以下特点:

1)简单易用可交互:接入使用比较简单,并且提供交互式操作界面;

2)支持不同类型接口:能支持http(超文本传输协议)接口、RPC(RemoteProcedure Call,远程过程调用)接口、其他内部服务的接口文档自动生成;

3)接口参数强类型验证:防止因为接口参数名错误、类型不一致导致运行异常;

4)可配置:在不同环境识别不同配置,比如生产prod环境不暴露接口。在Java项目中最广泛使用的接口文档生成工具为Swagger,使用Swagger生成API(ApplicationProgramming Interface,应用程序接口),可以得到交互式文档、自动生成代码的SDK(Software Development Kit,软件开发工具包)、接口测试等。

在实际的应用场景中,Swagger能够通过简单配置,将http接口暴露出来,并形成可交互的接口文档,目前公司各业务线都有接入。Swagger虽然应用比较广泛,能满足简单易用可交互、接口参数强类型验证,通过识别到不同环境下的配置,也能做到可配置化。但缺点是Swagger默认仅支持http接口,不能扫描到RPC接口或者其他服务接口,支持的接口单一。如果需要调用这些接口需要编写控制器controller层,在controller的方法逻辑中调用这些接口,工作量较大。如果需要在ST环境生成接口文档后,还需要接口测试,流程会比较长,造成人力物力的浪费。

针对上述的问题,目前尚未提出有效的解决方案。

发明内容

本发明实施例提供了一种接口文档生成方法及装置、电子设备及可读存储介质,以至少解决由于相关技术中Swagger支持的接口单一,需要人工干预才能调用其他接口,而导致接口适配性低、人力资源浪费的技术问题。

根据本发明实施例的一个方面,提供了一种接口文档生成方法,包括:目标应用程序所处系统环境的环境配置参数与接口文档的环境配置参数匹配的情况下,对所述目标应用程序中各个对象进行遍历,来确定自定义对象,其中,所述自定义对象中存在自定义方法,所述自定义方法为存在自定义注解的方法;获取与各个自定义对象分别对应的自定义方法;对各个所述自定义方法进行解析,以得到接口文档参数;根据所述接口文档参数生成所述目标应用程序对应的接口文档

根据本发明实施例的另一方面,还提供了一种接口文档生成装置,包括:确定单元,用于在目标应用程序的环境配置参数符合预设条件的情况下,对所述目标应用程序中各个对象进行遍历,来确定自定义对象,其中,所述自定义对象中存在所述自定义方法;获取单元,用于获取与各个自定义对象分别对应的自定义方法,其中,所述自定义方法为存在自定义注解的方法;解析单元,用于对各个所述自定义方法进行解析,以得到接口文档参数;处理单元,用于根据所述接口文档参数生成所述目标应用程序对应的接口文档。

根据本发明实施例的另一方面,还提供了一种电子设备,其特征在于,包括处理器,存储器及存储在所述存储器上并可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如上所述的接口文档生成方法的步骤。

根据本发明实施例的另一方面,还提供了一种可读存储介质,其特征在于,所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时实现如上所述的接口文档生成方法的步骤。

在本发明实施例中,目标应用程序所处系统环境的环境配置参数与接口文档的环境配置参数匹配的情况下,对所述目标应用程序中各个对象进行遍历,来确定自定义对象,其中,所述自定义对象中存在自定义方法,所述自定义方法为存在自定义注解的方法,获取所述目标应用程序中各个对象分别对应的自定义方法,对各个所述自定义方法进行解析,以得到接口文档参数;根据所述接口文档参数生成所述目标应用程序对应的接口文档,达到了根据不用应用程序不同接口来生成对应的接口文档,减少了人工干预,提高了生成的接口文档的适配性,进而解决了由于相关技术中Swagger支持的接口单一,需要人工干预才能调用其他接口,而导致接口适配性低、人力资源浪费的技术问题。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是根据本发明实施例的一种可选的接口文档生成方法的流程示意图;

图2是根据本发明实施例的一种可选的接口文档图形用户界面的示意图;

图3是根据本发明实施例的又一种可选的接口文档生成方法的流程示意图;

图4是根据本发明实施例的一种可选的接口文档调用方法的流程示意图;

图5是根据本发明实施例的一种可选的接口文档生成装置的结构框图;

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

实施例1

在对本发明的实施例进行介绍之前,首先对以下名词进行解释:

接口文档:在项目开发中,web项目的前后端分离开发以及应用程序APP开发,需要由前后端工程师共同定义接口,编写接口文档。然后根据这个接口文档进行开发,到项目结束前都要一直维护。

由于相关技术中,Swagger默认仅支持http接口,对于RPC接口或者其他服务接口不能扫描到,支持的接口单一。需要人工干预才能调用其他接口,造成人力物力的浪费。

针对上述问题,本实施例提出了一种接口文档生成方法,通过在在目标应用程序的环境配置参数符合预设条件的情况下,获取目标应用程序中各个对象分别对应的自定义方法,其中,自定义方法为存在自定义注解的方法;对各个自定义方法进行解析,以得到接口文档参数;根据接口文档参数生成目标应用程序对应的接口文档,达到了根据不用应用程序不同接口来生成对应的接口文档,减少了人工干预,提高了生成的接口文档的适配性。

图1是根据本发明实施例的一种接口文档生成方法的流程示意图,如图1所示,该方法具体可以包括以下步骤:

S102,目标应用程序所处系统环境的环境配置参数与接口文档的环境配置参数匹配的情况下,对所述目标应用程序中各个对象进行遍历,来确定自定义对象,其中,所述自定义对象中存在自定义方法,所述自定义方法为存在自定义注解的方法;

S104,获取与各个自定义对象分别对应的自定义方法;

在具体地应用场景,系统环境包括生产环境、测试环境、预发布环境以及正式环境等环境,不同的系统环境应用程序的接口文档也不相同。在针对目标应用程序生成接口文档时,首先确定目标应用程序当前所处的系统环境。若已经针对所处的当前系统环境下的目标应用程序生成了接口文档,则不再基于目标应用程序再次生成接口文档。若未针对所处的当前系统环境下的目标应用程序生成接口文档,则基于当前系统环境下的目标应用程序生成接口文档。

具体地,在目标应用程序所处系统环境的环境配置参数与接口文档的环境配置参数匹配的情况下,对目标应用程序中的对象进行遍历,以获取自定义对象中存在的自定义方法。

具体地,在目标应用程序所处系统环境的环境配置参数与接口文档的环境配置参数匹配的情况下,即,若确定未针对所处的当前系统环境下的目标应用程序生成接口文档时,则基于当前系统环境下的目标应用程序生成接口文档。通过获取目标应用程序中的环境配置参数,该环境配置参数用于标识目标应用程序当前所处的系统环境。判断目标应用程序所处系统环境的环境配置参数与接口文档的环境配置参数是否匹配,若匹配,则确定目标应用程序的环境配置参数符合预设条件;若不匹配,则确定目标应用程序的环境配置参数不符合预设条件。

在实际的应用场景中,对于Swagger不支持的接口,其对应的应用程序中存在Swagger支持的方法以及Swagger不支持的方法,Swagger支持的方法为一般方法,一般方法在Swagger中直接应用在接口文档中。在本实施例中,Swagger不支持的方法包含有自定义注解,定义包含自定义注解的方法为自定义方法,自定义方法需要进行解析后应用在接口文档中。

因此,在目标应用程序启动后,在目标应用程序所处系统环境的环境配置参数与接口文档的环境配置参数匹配的情况下,对目标应用程序中的对象进行遍历,获取存在自定义注解的自定义方法,以得到自定义方法集合。

S106,对各个自定义方法进行解析,以得到接口文档参数;

具体地,对自定义方法进行解析,包括对对象、方法名称、自定义注解、参数等进行解析,以获得Swagger文档化所需的接口文档参数。

S108,根据接口文档参数生成目标应用程序对应的接口文档。

具体地,在获取到接口文档参数之后,按照Swagger模板形成接口文档。

需要说明的是,通过本实施例,在目标应用程序所处系统环境的环境配置参数与接口文档的环境配置参数匹配的情况下,获取所述目标应用程序中各个对象分别对应的自定义方法,对各个所述自定义方法进行解析,以得到接口文档参数;根据所述接口文档参数生成所述目标应用程序对应的接口文档,达到了根据不用应用程序不同接口来生成对应的接口文档,减少了人工干预,提高了生成的接口文档的适配性,进而解决了由于相关技术中Swagger支持的接口单一,需要人工干预才能调用其他接口,而导致接口适配性低、人力资源浪费的技术问题。

作为一种可选地实施方式,本实施例中,获取各个自定义对象分别对应的自定义方法,包括但不限于:对自定义对象中的自定义方法进行过滤,以得到自定义方法集合。

具体地,获取目标应用程序的自定义注解和环境配置参数,在目标应用程序所处系统环境的环境配置参数与接口文档的环境配置参数匹配的情况下,对目标应用程序中的对象进行遍历,获取包括自定义注解的自定义方法进行过滤,形成自定义方法集合。

作为一种可选地实施方式,本实施例中,对各个自定义方法进行解析,包括但不限于:对自定义对象以及自定义方法的方法名称进行解析,以得到接口文档的标题以及调用地址;对自定义方法的注解或参数进行解析,以得到接口文档的方法描述以及参数描述;根据标题、调用地址、方法描述以及参数描述确定接口文档参数。

具体地,对自定义方法集合中的自定义方法进行解析,包括自定义对象bean解析、方法名称解析、注解解析、参数解析。其中通过自定义bean解析和方法名称解析来获取接口文档的标题以及调用地址URL(Uniform Resource Locator,统一资源定位器),通过对注解解析获取具体方法描述和参数描述,以丰富接口文档的描述内容,使得接口文档更容易理解。

在一个优选地实施方式中,在自定义方法的注解解析缺省的情况下,对自定义方法的参数名称、参数类型进行解析,以获取从参数名称以及参数类型的描述文件。

作为一种可选地实施方式,本实施例中,在根据接口文档参数生成目标应用程序对应的接口文档之后,还包括但不限于:接收接口调用请求,其中,接口调用请求用于请求目标接口的目标接口文档;在接口调用请求验证成功的情况下,对接口调用请求进行解析,以得到解析结果;对解析结果进行反射调用,以得到目标接口文档。

具体地,接收用于请求目标接口的目标接口文档的接口调用请求后,对接口调用请求进行验证,对接口调用请求中的请求路径、请求参数进行校验,在校验失败的情况下,结束流程;在校验成功的情况下,对接口调用请求进行解析,包括对象解析、方法解析、参数解析,在解析完成后,通过发射进行调用,在调用后返回目标接口文档。

作为一种可选地实施方式,本实施例中,接收接口调用请求,包括但不限于:在预设图形用户界面中展示接口列表;检测作用于接口列表的选取操作,根据选取操作确定目标接口;接收输入的接口参数;根据接口参数以及目标接口生成接口调用请求。

具体地,在本实施例中,如图2所示的预设图像用户界面20中,展示了接口列表,接口列表包括接口201、接口202以及接口203、检测作用于接口列表的选取操作,根据选取操作确定目标接口为接口202,接收输入的接口参数,然后根据接口参数以及接口202生成接口调用请求。

在一个例子中,在Swagger界面选择自定义接口文档后,选择对应的接口,并输入所需参数,发起接口调用请求。

通过上述实施例,在设图形用户界面中展示接口列表,根据选取操作选取的目标接口以及输入的接口参数生成接口调用请求,实现了接口的接口文档的快速调用。

作为一种可选地实施方式,本实施例中,接口调用请求包括请求路径,其中:在接收接口调用请求之后,还包括但不限于:对请求路径以及接口参数进行验证;在请求路径以及接口参数验证成功的情况下,确定接口调用请求验证成功;否则,确定接口调用请求验证失败。

进一步可选地,本实施例中,在接口调用请求验证成功的情况下,对接口调用请求进行解析,包括但不限于:对目标接口对应的对象、方法以及参数进行解析,以得到解析结果。

具体地,在上述例子中,接收Swagger发起的针对自定义接口文档的接口调用请求后,在本实施例中,Swagger的接收到通用接口请求,请求路径为service/${beanName}/${methodName},并在接口调用请求中携带了请求参数,扩展的Swagger对请求路径、请求参数进行校验。在接口调用请求验证成功的情况下,对接口调用请求进行解析。包括bean解析、方法解析、参数解析,解析后通过反射进行调用;调用后则返回结果,结果以Swagger要求的格式进行封装。

在本发明实施例中,在目标应用程序所处系统环境的环境配置参数与接口文档的环境配置参数匹配的情况下,获取所述目标应用程序中各个对象分别对应的自定义方法,对各个所述自定义方法进行解析,以得到接口文档参数;根据所述接口文档参数生成所述目标应用程序对应的接口文档,达到了根据不用应用程序不同接口来生成对应的接口文档,减少了人工干预,提高了生成的接口文档的适配性,进而解决了由于相关技术中Swagger支持的接口单一,需要人工干预才能调用其他接口,而导致接口适配性低、人力资源浪费的技术问题。

实施例2

根据本发明的另一个方面,提出了一种接口文档生成方法,如图3所示,具体地,该方法可以包括如下几个步骤:

步骤301:待接入的系统配置自定义注解@EnableSwaggerExt;

步骤302:目标应用程序对应的项目启动后,识别到注解@EnableSwaggerExt和该环境的配置参数,根据配置参数决定是否扫描所有的bean,如果参数需要扫描,则进入到步骤303,否则流程结束;

步骤303:对bean进行遍历,对该bean有自定义注解@ApiMethod的方法进行过滤,形成接口方法集合;

步骤304:对方法集合中的方法进行解析,包括bean解析、方法名解析、注解解析、参数解析。其中bean解析和方法名解析主要是为了获得接口文档的标题和通用接口调用url。注解解析是为了获取更具体方法描述和参数描述,使得接口文档更加友好、容易理解。在注解解析部分配置缺省的情况下,会对参数名称、参数类型进行进一步的解析。获取到了Swagger文档化所需的参数后,进入步骤5;

步骤305:按照Swagger模板形成接口文档。

根据本发明的另一个方面,提出了一种接口文档的调用方法,如图4所示,该方法具体可以包括如下几个步骤:

步骤401:用户在Swagger界面选择自定义接口分组文档后,选择对应的接口,并输入所需参数,发起接口调用请求;

步骤402:扩展的Swagger的接收接口调用请求,请求路径为service/${beanName}/${methodName},并在在请求中携带了请求参数,扩展的Swagger对请求路径、请求参数进行校验,校验失败,接口调用失败,结束流程,校验成功转到步骤3;

步骤403:对请求进一步进行解析,包括bean解析、方法解析、参数解析,解析后通过反射进行调用;

步骤404:调用后则返回结果,结果以Swagger要求的格式进行封装。

通过上述实施例提出的接口文档生成方法以及接口文档调用方法,在在目标应用程序所处系统环境的环境配置参数与接口文档的环境配置参数匹配的情况下,获取所述目标应用程序中各个对象分别对应的自定义方法,对各个所述自定义方法进行解析,以得到接口文档参数;根据所述接口文档参数生成所述目标应用程序对应的接口文档,达到了根据不用应用程序不同接口来生成对应的接口文档,减少了人工干预,提高了生成的接口文档的适配性,进而解决了由于相关技术中Swagger支持的接口单一,需要人工干预才能调用其他接口,而导致接口适配性低、人力资源浪费的技术问题。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

实施例3

根据本发明实施例,还提供了一种用于实施上述接口文档生成方法的接口文档生成装置,如图5所示,该装置包括:

1)确定单元50,用于目标应用程序所处系统环境的环境配置参数与接口文档的环境配置参数匹配的情况下,对所述目标应用程序中各个对象进行遍历,来确定自定义对象,其中,所述自定义对象中存在自定义方法,所述自定义方法为存在自定义注解的方法;

2)获取单元52,用于获取与各个自定义对象分别对应的自定义方法;

3)解析单元54,用于对各个所述自定义方法进行解析,以得到接口文档参数;

4)处理单元56,用于根据所述接口文档参数生成所述目标应用程序对应的接口文档。

可选地,本实施例中的具体示例可以参考上述实施例1或2中所描述的示例,本实施例在此不再赘述。

实施例4

根据本发明实施例,还提供了一种用于实施上述接口文档生成方法的电子设备,包括处理器,存储器及存储在所述存储器上并可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如上所述的接口文档生成方法的步骤。

可选地,在本实施例中,存储器被设置为存储用于执行以下步骤的程序代码:

S1,目标应用程序所处系统环境的环境配置参数与接口文档的环境配置参数匹配的情况下,对所述目标应用程序中各个对象进行遍历,来确定自定义对象,其中,所述自定义对象中存在自定义方法,所述自定义方法为存在自定义注解的方法;

S2,获取与各个自定义对象分别对应的自定义方法;

S3,对各个所述自定义方法进行解析,以得到接口文档参数;

S4,根据所述接口文档参数生成所述目标应用程序对应的接口文档。

可选地,本实施例中的具体示例可以参考上述实施例1和实施例2中所描述的示例,本实施例在此不再赘述。

实施例5

本发明的实施例还提供了一种可读存储介质,所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时实现如上所述的接口文档生成方法的步骤。

可选地,在本实施例中,可读存储介质被设置为存储用于执行以下步骤的程序代码:

S1,目标应用程序所处系统环境的环境配置参数与接口文档的环境配置参数匹配的情况下,对所述目标应用程序中各个对象进行遍历,来确定自定义对象,其中,所述自定义对象中存在自定义方法,所述自定义方法为存在自定义注解的方法;

S2,获取与各个自定义对象分别对应的自定义方法;

S3,对各个所述自定义方法进行解析,以得到接口文档参数;

S4,根据所述接口文档参数生成所述目标应用程序对应的接口文档。

可选地,存储介质还被设置为存储用于执行上述实施例1中的方法中所包括的步骤的程序代码,本实施例中对此不再赘述。

可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

可选地,本实施例中的具体示例可以参考上述实施例1和实施例2中所描述的示例,本实施例在此不再赘述。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。

在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

14页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:相似代码检测方法、装置、设备和计算机存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!