更新时间:2025-03-24 GMT+08:00
分享

swagger2使用指南

引入依赖

通过Maven引入需要的依赖。

<dependency>
      <groupId>com.huaweicloud.devspore</groupId>
      <artifactId>swagger-extension-springfox</artifactId>
      <version>${devspore-swagger-extension.version}</version> #版本号,版本号可参考AstroPro-SDK版本变更与下载。
</dependency>

添加配置

com.huaweicloud.devspore:swagger-extension-springfox组件提供了如下配置项:

表1 配置参数说明

配置项

类型

默认值

说明

devspore.swagger-extension.springfox.enable

Boolean

true

是否对springfox-swagger进行扩展增强。

devspore.swagger-extension.package-name

String

使用此swagger生成代码时期望的package。

devspore.swagger-extension.generate-mode

Enum(CLIENT, SERVER)

CLIENT

使用此swagger生成客户端代码或服务端代码。

devspore.swagger-extension.client-model-package

String

model

使用此swagger生成客户端代码时实体类的包名,默认为model。

devspore.swagger-extension.additional-pom-gav

List<String>

使用此swagger生成代码时需要添加的pom依赖。

其中,devspore.swagger-extension.package-name为必填项,否则用此swagger文档生成的客户端代码编译将会有问题。

添加自定义注解

若有需要为方法添加一些自定义的特定注解,devspore-swagger-extension组件也提供了扩展机制,定义了如下接口:

import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;

import java.util.List;

public interface MethodAnnotationHandler {

    List<Annotation> getAnnotations(HandlerMethod handlerMethod, RequestMappingInfo requestMappingInfo);
}

关键类:
@Data
public class Annotation {
    /**
     * 最终生成注解名字,eg:  @SuppressWarnings("deprecation")
     */
    private String name;

    /**
     * 注解需要的import,eg: lombok.NonNull; (注意:每个import必须添加末尾的英文分号)
     */
    private List<String> imports;
}

使用者需实现此接口,并将对应实现类注入到spring的上下文里,如下为默认实现:

@Bean
@ConditionalOnMissingBean(MethodAnnotationHandler.class)
public MethodAnnotationHandler methodAnnotationHandler() {
	return ((handlerMethod, requestMappingInfo) -> new ArrayList<>());
}

获取swagger描述文档

启动项目后,访问http://{domain-url}/v2/api-docs,获取swagger描述文档。

泛型类处理示例

原有泛型类:

public class Result <T>{
    private T data;
    private String code;
    private String status;}

springfox默认生成的泛型类swagger描述:

 Result«string»:
    type: object
    properties:
      code:
        type: string
      data:
        type: string
      status:
        type: string
    title: Result«string»

使用此组件后生成的泛型类swagger描述:

在不破坏原有swagger的前提下,添加如下自定义swagger标签。

  • x-generic:表示类的泛型参数。
  • x-generic-class:表示泛型类名称。
  • x-type:表示类成员的泛型类型。
 Result«string»:
    type: object
    properties:
      code:
        type: string
      data:
        type: string
        x-type: T
      status:
        type: string
    title: Result«string»
    x-generic-class: Result
    x-generic: T

以上自定义标签仅在使用AstroPro平台以swagger方式生成代码时使用。

相关文档