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

Spring Boot集成SpringFox 3.0與Pageable參數(shù)處理方法

 更新時(shí)間:2023年10月24日 10:04:33   作者:工程師小A  
這篇文章主要介紹了Spring Boot集成SpringFox 3.0與Pageable參數(shù)處理,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

Springfox 3.0有多個(gè)模塊,提供了spring boot starter,與Spring Boot集成時(shí)僅需引入springfox-boot-starter,如下:

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

如果您以前使用了Springfox 2.x,需要修改一下Swagger配置:

刪除@EnableSwagger2注解,改為@EnableOpenApi
將Docket中的參數(shù)DocumentationType.SWAGGER_2改為DocumentationType.OAS_30
Springfox 3.0刪除了一些第三方模塊,如有引用需要替換
修改后的配置如下:

package com.ys.config;
import com.fasterxml.classmate.TypeResolver;
import org.itrunner.heroes.exception.ErrorMessage;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.ResponseEntity;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import java.time.LocalDate;
import java.util.List;
import static java.util.List.of;
@EnableOpenApi
@Configuration
public class SwaggerConfig {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.OAS_30)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.ys.controller"))
                .paths(PathSelectors.any())
                .build()
                .apiInfo(apiInfo())
                .pathMapping("/")
                .directModelSubstitute(LocalDate.class, String.class)
                .genericModelSubstitutes(ResponseEntity.class)
                .additionalModels(new TypeResolver().resolve(ErrorMessage.class))
                .useDefaultResponseMessages(false)
                .securitySchemes(of(authenticationScheme()))
                .securityContexts(of(securityContext()))
                .enableUrlTemplating(false);
    }
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Api Documentation")
                .description("Api Documentation")
                .contact(new Contact("xx", "http://xxxxxx", "xxxxx@163.com"))
                .version("1.0.0")
                .build();
    }
    private HttpAuthenticationScheme authenticationScheme() {
        return HttpAuthenticationScheme.JWT_BEARER_BUILDER.name("BearerToken").build();
    }
    private SecurityContext securityContext() {
        return SecurityContext.builder()
                .securityReferences(defaultAuth())
                .operationSelector(operationContext ->
                        operationContext.requestMappingPattern().startsWith("/api/")
                )
                .build();
    }
    private List<SecurityReference> defaultAuth() {
        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
        authorizationScopes[0] = authorizationScope;
        return of(new SecurityReference("BearerToken", authorizationScopes));
    }
}

上面我們使用了HttpAuthenticationScheme構(gòu)建Bearer Token Authentication,在Swagger UI界面點(diǎn)擊Authorize時(shí)直接輸出token值即可。

Springfox 3.0的Swagger UI地址,從http://host/context-path/swagger-ui.html 改成了 http://host/context-path/swagger-ui/ ,OAS 3.0的api docs地址默認(rèn)為/v3/api-docs,因此Security中的ignore path要進(jìn)行相應(yīng)修改。

Pageable參數(shù)
當(dāng)REST API的方法含有org.springframework.data.domain.Pageable參數(shù)時(shí),Springfox根據(jù)接口生成pageNumber、pageSize、offset、paged、unpaged、sort.sorted、sort.unsorted等參數(shù),這與Spring Boot實(shí)際使用的參數(shù)是不一致的,因此需要針對(duì)Pageable參數(shù)進(jìn)行特殊處理。

我們使用OperationBuilderPlugin處理Pageable參數(shù),如下:

package com.ys.config;
import com.fasterxml.classmate.ResolvedType;
import com.fasterxml.classmate.TypeResolver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.Order;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Component;
import springfox.documentation.builders.RequestParameterBuilder;
import springfox.documentation.schema.ScalarType;
import springfox.documentation.service.ParameterType;
import springfox.documentation.service.RequestParameter;
import springfox.documentation.service.ResolvedMethodParameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.OperationBuilderPlugin;
import springfox.documentation.spi.service.contexts.OperationContext;
import java.util.ArrayList;
import java.util.List;
@Component
@Order
public class PageableParameterReader implements OperationBuilderPlugin {
    private final TypeResolver resolver;
    @Autowired
    public PageableParameterReader(TypeResolver resolver) {
        this.resolver = resolver;
    }
    @Override
    public void apply(OperationContext context) {
        List<ResolvedMethodParameter> methodParameters = context.getParameters();
        ResolvedType pageableType = resolver.resolve(Pageable.class);
        List<RequestParameter> parameters = new ArrayList<>();
        for (ResolvedMethodParameter methodParameter : methodParameters) {
            ResolvedType resolvedType = methodParameter.getParameterType();
            if (pageableType.equals(resolvedType)) {
                parameters.add(new RequestParameterBuilder()
                        .in(ParameterType.QUERY)
                        .name("page")
                        .query(q -> q.model(m -> m.scalarModel(ScalarType.INTEGER)))
                        .description("Results page you want to retrieve (0..N)").build());
                parameters.add(new RequestParameterBuilder()
                        .in(ParameterType.QUERY)
                        .name("size")
                        .query(q -> q.model(m -> m.scalarModel(ScalarType.INTEGER)))
                        .description("Number of records per page").build());
                parameters.add(new RequestParameterBuilder()
                        .in(ParameterType.QUERY)
                        .name("sort")
                        .query(q -> q.model(m -> m.collectionModel(c -> c.model(cm -> cm.scalarModel(ScalarType.STRING)))))
                        .description("Sorting criteria in the format: property(,asc|desc). "
                                + "Default sort order is ascending. "
                                + "Multiple sort criteria are supported.")
                        .build());
                context.operationBuilder().requestParameters(parameters);
            }
        }
    }
    @Override
    public boolean supports(DocumentationType delimiter) {
        return true;
    }
}

方案一:在Controller分頁(yè)方法的Pageable參數(shù)前添加@ApiIgnore,忽略默認(rèn)的參數(shù)解析:

public ResponseEntity<List<DeviceDTO>> getAllDevices(@ApiIgnore @PageableDefault(sort = {"id"}, direction = Sort.Direction.DESC) Pageable pageable,
                                                     @RequestParam(required = false) @ApiParam(value = "關(guān)鍵字(序列號(hào),地址,歸屬單位)") String keyword,

方案二:全局配置,在SwaggerConfig類的createRestApi方法中添加:.ignoredParameterTypes(Pageable.class)

@EnableOpenApi
@Configuration
public class SwaggerConfig {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.OAS_30)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.ys.controller"))
                .paths(PathSelectors.any())
                .build()
                .apiInfo(apiInfo())
                .ignoredParameterTypes(Pageable.class)
                .pathMapping("/")
                .directModelSubstitute(LocalDate.class, String.class)
                .genericModelSubstitutes(ResponseEntity.class)
                .additionalModels(new TypeResolver().resolve(ErrorMessage.class))
                .useDefaultResponseMessages(false)
                .securitySchemes(of(authenticationScheme()))
                .securityContexts(of(securityContext()))
                .enableUrlTemplating(false);
    }

修改后Swagger UI中顯示的Pageable參數(shù)如下:

到此這篇關(guān)于Spring Boot集成SpringFox 3.0與Pageable參數(shù)處理的文章就介紹到這了,更多相關(guān)Spring Boot集成SpringFox 3.0內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • maven setting多倉(cāng)庫(kù)配置方式

    maven setting多倉(cāng)庫(kù)配置方式

    這篇文章主要介紹了maven setting多倉(cāng)庫(kù)配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • java封裝類型與基礎(chǔ)類型對(duì)比示例分析

    java封裝類型與基礎(chǔ)類型對(duì)比示例分析

    這篇文章主要為大家介紹了java封裝類型與基礎(chǔ)類型對(duì)比示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Java枚舉從基礎(chǔ)到高級(jí)使用技巧完全解析

    Java枚舉從基礎(chǔ)到高級(jí)使用技巧完全解析

    Java枚舉(enum)是Java 5引入的一種特殊類,用于表示一組固定的常量(如狀態(tài)、類型等),這篇文章主要介紹了Java枚舉從基礎(chǔ)到高級(jí)使用技巧完全解析的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2026-05-05
  • 16 個(gè)有用的的Java工具類(小結(jié))

    16 個(gè)有用的的Java工具類(小結(jié))

    這篇文章主要介紹了16 個(gè)有用的的Java工具類,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Java web項(xiàng)目中的強(qiáng)制登錄功能實(shí)現(xiàn)代碼

    Java web項(xiàng)目中的強(qiáng)制登錄功能實(shí)現(xiàn)代碼

    本文給大家分享Java web項(xiàng)目中的強(qiáng)制登錄功能實(shí)現(xiàn)代碼,為了避免直接進(jìn)入項(xiàng)目中存在的頁(yè)面,使用filter過濾器,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-11-11
  • 用Java進(jìn)行zip文件壓縮與解壓縮

    用Java進(jìn)行zip文件壓縮與解壓縮

    這篇文章主要介紹了用Java進(jìn)行zip文件壓縮與解壓縮的方法,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12
  • 詳解JDK中ExecutorService與Callable和Future對(duì)線程的支持

    詳解JDK中ExecutorService與Callable和Future對(duì)線程的支持

    這篇文章主要介紹了詳解JDK中ExecutorService與Callable和Future對(duì)線程的支持的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • Java中@ConditionalOnProperty注解使用

    Java中@ConditionalOnProperty注解使用

    在Spring?Boot中,@ConditionalOnProperty注解是一種方便的工具,用于根據(jù)應(yīng)用程序配置文件中的屬性值來控制Bean的創(chuàng)建和加載,本文就來介紹一下Java中@ConditionalOnProperty注解使用,感興趣的可以了解一下
    2023-11-11
  • java 對(duì)象參數(shù)去空格方式代碼實(shí)例

    java 對(duì)象參數(shù)去空格方式代碼實(shí)例

    這篇文章主要介紹了java 對(duì)象參數(shù)去空格方式代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Java中Base64和File之間互轉(zhuǎn)代碼示例

    Java中Base64和File之間互轉(zhuǎn)代碼示例

    這篇文章主要給大家介紹了關(guān)于Java中Base64和File之間互轉(zhuǎn)的相關(guān)資料,Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)碼的編碼方式之一,Base64就是一種基于64個(gè)可打印字符來表示二進(jìn)制數(shù)據(jù)的方法,需要的朋友可以參考下
    2023-08-08

最新評(píng)論

息烽县| 黄骅市| 聂拉木县| 富民县| 定日县| 岱山县| 长春市| 常熟市| 梧州市| 阜平县| 潮州市| 合肥市| 阿图什市| 兖州市| 满洲里市| 垫江县| 肃宁县| 武安市| 东明县| 安阳市| 绍兴市| 杭锦后旗| 北安市| 鹤岗市| 屏东县| 桐城市| 肇东市| 鄂托克前旗| 嘉鱼县| 黄石市| 万全县| 澄迈县| 安徽省| 陕西省| 万年县| 微山县| 康乐县| 贵阳市| 怀远县| 阳新县| 灵台县|