中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot如何整合OpenApi

發布時間:2021-08-27 08:57:11 來源:億速云 閱讀:394 作者:小新 欄目:開發技術

這篇文章主要介紹SpringBoot如何整合OpenApi,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

OpenAPI是規范;Swagger是實現規范的工具。

OpenAPI 3.0是該規范的第一個正式版本,因為它是由SmartBear Software捐贈給OpenAPI Initiative,并在2015年從Swagger規范重命名為OpenAPI規范。

OpenAPI是規范的正式名稱。該規范的開發是由OpenAPI Initiative推動的,該倡議涉及更多來自技術領域不同領域的30個組織-包括Microsoft,Google,IBM和CapitalOne。

領導Swagger工具開發的公司Smartbear Software也是OpenAPI Initiative的成員,幫助領導了規范的發展。

SpringBoot整合OpenApi

確保SpringBoot版本在2.x級以上。

OpenAPI依賴

引入OpenApi依賴

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>

編寫配置類

編寫配置類,并手動裝配@EnableOpenApi

@EnableOpenApi
@Configuration
public class OpenApiConfiguration {

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.OAS_30)
                .apiInfo(apiInfo())
                .select()
                .apis(apis())
                .paths(PathSelectors.any())
                .build()
                .enable(true);
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("項目名稱")
                .description("項目描述")
                .termsOfServiceUrl("項目地址")
                .version("API版本")
                .license("公司的license")
                .licenseUrl("公司的license地址")
                .build();
    }

    private Predicate<RequestHandler> apis() {
        return RequestHandlerSelectors.basePackage("controller包的路徑");
    }
}

到這里SpringBoot就整合OpenAPI成功了。需要一提的是,OpenAPI不僅可以通過掃描controller包的路徑生成OpenAPI,也可以通過掃描@ApiOperation來生成OpenAPI。

改造優化

上面的示例通過硬編碼的形式,所以無法進行代碼的復用,而且每次更新配置的時候,都需要更改代碼,比如我們的項目在開發或者測試環境時,我們希望能正常使用OpenAPI但是在生產環境需要禁用OpenAPI。
在工程學的角度,常用的做法是盡量通過更改配置的形式,問不是更改代碼。基于此,我們可以借助SpringBoot的配置功能,對上述代碼進行改造。

新增OpenApi配置類

@Data
@Component
@ConfigurationProperties(prefix = "example.web.swagger")
public class SwaggerProperties {
    /**
     * 是否swagger3啟用,默認不啟用
     */
    private Boolean enable = false;
    /**
     * 掃描包路徑,可以不指定,系統會通過自動掃描{@link io.swagger.annotations.ApiOperation}
     */
    private String basePackage;
    /**
     * 標題
     */
    private String title;
    /**
     * 應用描述
     */
    private String description;
    /**
     * 服務地址
     */
    private String serviceUrl;
    /**
     * 版本,默認V1.0.0
     */
    private String version = "V1.0.0";
    /**
     * license
     */
    private String license;
    /**
     * licenseUrl
     */
    private String licenseUrl;
}

配置替換硬編碼

@Slf4j
@Configuration
@EnableOpenApi
public class OpenApiConfiguration {

    @Resource
    private SwaggerProperties swaggerProperties;

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.OAS_30)
                .apiInfo(apiInfo())
                .select()
                .apis(apis())
                .paths(PathSelectors.any())
                .build()
                .enable(isEnable());
    }

    private Boolean isEnable() {
        Boolean enable = swaggerProperties.getEnable();
        if (enable) {
            log.info("\nEnable Swagger3...");
        }
        return enable;
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title(swaggerProperties.getTitle())
                .description(swaggerProperties.getDescription())
                .termsOfServiceUrl(swaggerProperties.getServiceUrl())
                .version(swaggerProperties.getVersion())
                .license(swaggerProperties.getLicense())
                .licenseUrl(swaggerProperties.getLicenseUrl())
                .build();
    }

    private Predicate<RequestHandler> apis() {
        String basePackage = swaggerProperties.getBasePackage();
        // 默認通過掃描`ApiOperation`如果配置了包掃描路徑,使用配置的包掃描路徑
        return Strings.isNullOrEmpty(basePackage) ? withMethodAnnotation(ApiOperation.class) : basePackage(basePackage);
    }
}

通過這樣的簡單改造后,我們就可以完全通過配置文件的形式配置OpenApi

示例配置

example:
  web:
    swagger:
      enable: true
      title: 演示OpenAPI
      description: 演示OpenAPI
      base-package: com.example.controller

OpenAPI常用注解介紹

這里通過使用代碼演示注解的使用

實體類

需要在用戶的VO實體類標注@ApiModel并說明該類的作用, 屬性上通過@ApiModelProperty解析屬性的作用,并通過required值約定該屬性是否可以為空 可以通過example說明該屬性的用例值

@Data
@ApiModel("用戶信息")
public class UserVO {

    @ApiModelProperty(value = "用戶id", required = true, example = "asdf124")
    private String userId;

    @ApiModelProperty(value = "用戶名稱", required = true)
    private String username;

    @ApiModelProperty(value = "用戶年齡")
    private Integer age;
}
controller類

這里主要通過用戶注冊和用戶信息接口演示。

在配上通過@Api標注該類的功能;通過@ApiOperation說明接口的功能,如果傳入的數據不是實體類,而是一個基本數據類型,可以通過@ApiParam解釋參數的作用

@RequestMapping("user")
@RestController
@Api(tags = "用戶中心")
public class UserController {

    @ApiOperation("用戶注冊")
    @PostMapping
    public R<Void> register(@RequestBody UserVO userVO) {
        // todo 
        return R.ok();
    }

    @ApiOperation("通過Id獲取用戶信息")
    @GetMapping
    public R<UserVO> userInfo(@ApiParam(value = "用戶id",required = true) @RequestParam String userId) {
        // todo
        return R.ok(new UserVO());
    }
}
演示

啟動項目,通過訪問IP:PORT/swagger-ui/index.html即可看到swagger界面

SpringBoot如何整合OpenApi

以上是“SpringBoot如何整合OpenApi”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

措美县| 安顺市| 洮南市| 临西县| 巩留县| 彭水| 邵阳市| 阿巴嘎旗| 都安| 田东县| 出国| 上栗县| 云龙县| 和龙市| 神农架林区| 包头市| 庐江县| 寻乌县| 永福县| 察雅县| 延安市| 贞丰县| 江孜县| 中方县| 会同县| 德惠市| 仲巴县| 祁阳县| 鸡东县| 隆德县| 淮阳县| 湖州市| 博客| 山阳县| 兰溪市| 霍邱县| 皋兰县| 阿图什市| 大方县| 江华| 凤凰县|