最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springdoc替換swagger的實(shí)現(xiàn)步驟分解

 更新時(shí)間:2023年02月15日 16:20:30   作者:碼農(nóng)-文若書生  
最近在spring看到的,spring要對(duì)api文檔動(dòng)手了,有些人說(shuō)swagger不好用,其實(shí)也沒(méi)那么不好用,有人說(shuō)代碼還是有點(diǎn)侵入性,這倒是真的,我剛試了springdoc可以說(shuō)還是有侵入性但是也可以沒(méi)有侵入性,這就看你對(duì)文檔有什么要求了

前言

距離swagger上次發(fā)布版本已經(jīng)過(guò)去兩年多了,一直沒(méi)有更新,與當(dāng)前的springboot2.6.x、springboot2.7.x存在各種兼容問(wèn)題,對(duì)于即將發(fā)布的springboot3.x,可能存在更多兼容問(wèn)題。如下圖所示。

其實(shí)swagger還在更新,應(yīng)該是springfox不更新導(dǎo)致的,所以需要使用其他的API管理工具代替,springdoc是一種選擇

一、springdoc介紹

SpringDoc是一款可以結(jié)合SpringBoot使用的API文檔生成工具,基于OpenAPI 3,是一款更好用的Swagger庫(kù)!值得一提的是SpringDoc不僅支持Spring WebMvc項(xiàng)目,還可以支持Spring WebFlux項(xiàng)目,甚至Spring Rest和Spring Native項(xiàng)目。

二、使用步驟

1.引入庫(kù)

gradle:

api group: 'org.springdoc', name: 'springdoc-openapi-ui', version: '1.6.11'

maven:

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-ui</artifactId>
    <version>1.6.11</version>
</dependency>

2.spring配置類

創(chuàng)建一個(gè)spring配置類,添加springdoc的配置

@AutoConfiguration
public class SpringDocConfig {
    @Bean
    public OpenAPI openAPI() {
        return new OpenAPI()
                .info(new Info()
                        .title("newframe-接口文檔")
                        .description("基于SpringDoc的在線接口文檔")
                        .version("0.0.1"));
    }
    @Bean
    public GroupedOpenApi publicApi() {
        return GroupedOpenApi.builder()
                .group("權(quán)限相關(guān)")
                .packagesToScan("com.iscas.biz.controller.common.auth")
                .build();
    }
    @Bean
    public GroupedOpenApi adminApi() {
        return GroupedOpenApi.builder()
                .group("默認(rèn)")
                .pathsToMatch("/**")
                .build();
    }
}

3.常用的swagger注解和springdoc的對(duì)應(yīng)關(guān)系

4.一個(gè)接口類的示例

@Tag(name = "組織機(jī)構(gòu)管理-OrgController")
@RestController
@RequestMapping("/org")
@Validated
@ConditionalOnMybatis
public class OrgController extends BaseController {
    private final OrgService orgService;

    public OrgController(OrgService orgService) {
        this.orgService = orgService;
    }
    @Operation(summary="[組織機(jī)構(gòu)]獲取組織機(jī)構(gòu)樹", description="create by:朱全文 2021-02-20")
    @GetMapping
    public TreeResponse get() throws BaseException {
        return getTreeResponse().setValue(orgService.getTree());
    }
    @Operation(summary="[組織機(jī)構(gòu)]新增組織機(jī)構(gòu)節(jié)點(diǎn)", description="create by:朱全文 2021-02-20")
    @io.swagger.v3.oas.annotations.parameters.RequestBody(required = true, description = "組織機(jī)構(gòu)數(shù)據(jù)",
            content = @Content(schema = @Schema(implementation = Org.class)))
    @PostMapping("/node")
    public ResponseEntity addNode(@Valid @RequestBody Org org) throws BaseException {
        return getResponse().setValue(orgService.addOrg(org));
    }
    @Operation(summary="[組織機(jī)構(gòu)]修改組織機(jī)構(gòu)節(jié)點(diǎn)", description="create by:朱全文 2021-02-20")
    @io.swagger.v3.oas.annotations.parameters.RequestBody(required = true, description = "組織機(jī)構(gòu)數(shù)據(jù)",
            content = @Content(schema = @Schema(implementation = Org.class)))
    @PutMapping("/node")
    public ResponseEntity editNode(@Valid @RequestBody Org org) {
        return getResponse().setValue(orgService.editOrg(org));
    }
    @Operation(summary="[組織機(jī)構(gòu)]刪除組織機(jī)構(gòu)節(jié)點(diǎn)", description="create by:朱全文 2021-02-20")
    @io.swagger.v3.oas.annotations.parameters.RequestBody(required = true, description = "組織機(jī)構(gòu)ID集合", content = @Content(examples = @ExampleObject(value = "[123, 124]")))
    @PostMapping("/node/del")
    @Caching(evict = {
            @CacheEvict(value = "auth", key = "'url_map'"),
            @CacheEvict(value = "auth", key = "'menus'"),
            @CacheEvict(value = "auth", key = "'role_map'")
    })
    public ResponseEntity deleteNode(@RequestBody List<Integer> orgIds) {
        AssertCollectionUtils.assertCollectionNotEmpty(orgIds, "orgIds不能未空");
        orgService.deleteNode(orgIds);
        return getResponse();
    }
}

5.配置文件配置

springdoc.swagger-ui.doc-expansion=none
springdoc.swagger-ui.path=/doc.html

還有其他的各種配置,可以在寫配置的時(shí)候查看提示

6.WebMvc配置

@AutoConfiguration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.
                addResourceHandler("/swagger-ui/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/")
                .resourceChain(false);
        registry.
                addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/swagger-ui/")
                .setViewName("forward:/swagger-ui/index.html");
    }
}

7.UI

訪問(wèn)地址:http://localhost:7901/demo/swagger-ui/ 或 http://localhost:7901/demo/doc.html
UI還使用swagger的UI,如下圖所示:

到此這篇關(guān)于Springdoc替換swagger的實(shí)現(xiàn)步驟分解的文章就介紹到這了,更多相關(guān)Springdoc替換swagger內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java之如何正確地對(duì)包裝類進(jìn)行裝箱與拆箱

    Java之如何正確地對(duì)包裝類進(jìn)行裝箱與拆箱

    在這篇文章中給大家繼續(xù)講解包裝類的裝箱和拆箱問(wèn)題。你可能會(huì)很好奇,做java開發(fā),怎么還裝起箱子來(lái)了?那么就請(qǐng)大家?guī)е苫笸驴窗?/div> 2023-04-04
  • MyBatis分頁(yè)查詢與特殊字符處理方式

    MyBatis分頁(yè)查詢與特殊字符處理方式

    這篇文章主要介紹了MyBatis分頁(yè)查詢與特殊字符處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java中new與clone操作對(duì)象的比較方法舉例

    Java中new與clone操作對(duì)象的比較方法舉例

    這篇文章主要給大家介紹了關(guān)于Java中new與clone操作對(duì)象的比較方法,在java中對(duì)象的誕生是我們開發(fā)人員new出來(lái)的,對(duì)象的使用也是我們開發(fā)人員進(jìn)行操作的,需要的朋友可以參考下
    2024-07-07
  • Spring應(yīng)用拋出NoUniqueBeanDefinitionException異常的解決方案

    Spring應(yīng)用拋出NoUniqueBeanDefinitionException異常的解決方案

    這篇文章介紹了解決org.springframework.beans.factory.NoUniqueBeanDefinitionException異常的一些解決方案,從這些解決方案可以看出Spring框架的設(shè)計(jì)精妙,遇見此問(wèn)題的朋友可以參考下該解決方案
    2021-06-06
  • JDK12的新特性之CompactNumberFormat詳解

    JDK12的新特性之CompactNumberFormat詳解

    這篇文章主要介紹了JDK12的新特性之CompactNumberFormat,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Idea2023配置JavaWeb項(xiàng)目(最新)

    Idea2023配置JavaWeb項(xiàng)目(最新)

    本文將介紹如何配置JavaWeb項(xiàng)目,以在Idea中實(shí)現(xiàn)開發(fā)環(huán)境,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • Spring Security使用權(quán)限注解實(shí)現(xiàn)精確控制

    Spring Security使用權(quán)限注解實(shí)現(xiàn)精確控制

    在現(xiàn)代的應(yīng)用系統(tǒng)中,權(quán)限管理是確保系統(tǒng)安全性的重要環(huán)節(jié),Spring Security作為Java世界最為普及的安全框架,提供了強(qiáng)大而靈活的權(quán)限控制功能,這篇文章將深入探討Spring Security使用權(quán)限注解實(shí)現(xiàn)精確控制,需要的朋友可以參考下
    2024-12-12
  • Java中forEach使用lambda表達(dá)式,數(shù)組和集合的區(qū)別說(shuō)明

    Java中forEach使用lambda表達(dá)式,數(shù)組和集合的區(qū)別說(shuō)明

    這篇文章主要介紹了Java中forEach使用lambda表達(dá)式,數(shù)組和集合的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java中Lambda表達(dá)式之Lambda語(yǔ)法與作用域解析

    Java中Lambda表達(dá)式之Lambda語(yǔ)法與作用域解析

    這篇文章主要介紹了Java中Lambda表達(dá)式之Lambda語(yǔ)法與作用域解析重點(diǎn)介紹Lambda表達(dá)式基礎(chǔ)知識(shí),需要的朋友可以參考下
    2017-02-02
  • Java中使用MinIO的常用操作示例

    Java中使用MinIO的常用操作示例

    這篇文章主要介紹了Java中MinIO的常用操作示例,MinIO 是一款基于Go語(yǔ)言發(fā)開的高性能、分布式的對(duì)象存儲(chǔ)系統(tǒng),客戶端支持Java,Net,Python,Javacript, Golang語(yǔ)言,需要的朋友可以參考下
    2024-01-01

最新評(píng)論

平凉市| 周口市| 京山县| 海林市| 天气| 冷水江市| 信宜市| 沂水县| 庄浪县| 五台县| 潢川县| 儋州市| 博兴县| 随州市| 德令哈市| 临沂市| 织金县| 周至县| 健康| 冀州市| 宁陵县| 田阳县| 新晃| 涟水县| 巢湖市| 平潭县| 临沧市| 大城县| 乌海市| 临城县| 鄂托克前旗| 吉隆县| 得荣县| 司法| 达日县| 桑植县| 菏泽市| 怀安县| 康马县| 庆云县| 五家渠市|