首页 > 其他分享 >swagger 日常使用记录

swagger 日常使用记录

时间:2024-07-20 08:57:17浏览次数:9  
标签:swagger return 记录 documentation 日常 context import springfox

swagger相关依赖:

        <!--swagger-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>29.0-jre</version>
        </dependency>

        <!-- swaggwe增强ui -->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>1.9.6</version>
       </dependency>

swagger相关配置类:

import com.github.xiaoymin.swaggerbootstrapui.annotations.EnableSwaggerBootstrapUI;
import io.swagger.annotations.Api;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
@EnableSwaggerBootstrapUI
public class SwaggerConfiguration {

    /**
     * 配置api接口生成插件swagger
     * 测试环境在线文档地址:....../doc.html
     */
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("xx系统")
                .apiInfo(apiInfo())
                .useDefaultResponseMessages(false) // 不生成默认的响应码
                .select()
                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("xx系统接口说明")
                .version("1.0")
                .build();
    }

}


import com.fasterxml.jackson.databind.introspect.AnnotatedField;
import com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition;
import com.google.common.base.Optional;
import io.swagger.annotations.ApiModelProperty;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.schema.ModelPropertyBuilderPlugin;
import springfox.documentation.spi.schema.contexts.ModelPropertyContext;
import springfox.documentation.swagger.common.SwaggerPluginSupport;

import java.lang.reflect.Field;

import static springfox.documentation.schema.Annotations.findPropertyAnnotation;
import static springfox.documentation.swagger.schema.ApiModelProperties.findApiModePropertyAnnotation;

/**
 * @ApiModelProperty注解 默认按照字段定义顺序排序
 */
@Slf4j
@Component
public class CustomApiModelPropertyPositionBuilder implements ModelPropertyBuilderPlugin {
    @Override
    public void apply(ModelPropertyContext context) {
        Optional<BeanPropertyDefinition> beanPropertyDefinitionOpt = context.getBeanPropertyDefinition();
        if (!beanPropertyDefinitionOpt.isPresent()) {
            return;
        }
        // 获取注解信息
        Optional<ApiModelProperty> annotation = getAnnotation(context);
        if (!annotation.isPresent() || annotation.get().position() != 0) {
            return;
        }
        // 获取字段和类信息
        AnnotatedField currentField = beanPropertyDefinitionOpt.get().getField();
        Field[] declaredFields = currentField.getDeclaringClass().getDeclaredFields();
        // 获取字段的定义顺序
        int index = indexOf(declaredFields, currentField);
        if (index != -1) {
            // 设置position属性      context.getSpecificationBuilder().position(indexOf)
            context.getBuilder().position(index);
        }

    }

    @Override
    public boolean supports(DocumentationType delimiter) {
        return SwaggerPluginSupport.pluginDoesApply(delimiter);
    }

    /**
     * 获取注解信息
     */
    private Optional<ApiModelProperty> getAnnotation(ModelPropertyContext context) {
        if (context.getAnnotatedElement().isPresent()) {
            return findApiModePropertyAnnotation(context.getAnnotatedElement().get());
        }
        if (context.getBeanPropertyDefinition().isPresent()) {
            return findPropertyAnnotation(context.getBeanPropertyDefinition().get(), ApiModelProperty.class);
        }
        return Optional.absent();
    }

    /**
     * 获取字段的序号
     */
    private int indexOf(Field[] declaredFields, AnnotatedField field) {
        for (int i = 0; i < declaredFields.length; i++) {
            if (declaredFields[i].getName().equals(field.getName())) {
                return i;
            }
        }
        return -1;
    }   

标签:swagger,return,记录,documentation,日常,context,import,springfox
From: https://blog.csdn.net/CSDN20230104/article/details/140503831

相关文章

  • 2024.7 做题记录 2 / 顾影自怜了几回 直到看见妄自蕤
    CF653E不难发现其实就是在假想中建立出可以存在的边的图,要求跟\(1\)相连的连通块个数\(\leqk\)且与\(1\)的连边个数\(\geqk\)且全图联通,这个我们只需要知道其去掉\(1\)的连通性就很好讨论了。我们其实不能直接建出这个极度稠密的图,但是我们可以用数据结构优化建图,......
  • 「比赛记录」CF Round 954 (Div. 3)
    CodeforcesRound954(Div.3)题目列表:A.XAxisB.MatrixStabilizationC.UpdateQueriesD.MathematicalProblemE.BeautifulArrayF.Non-academicProblemG1.PermutationProblem(SimpleVersion)G2.PermutationProblem(HardVersion)A.XAxis题......
  • 日常工作中需要避免的9个React坏习惯
    日常工作中需要避免的9个React坏习惯前言React是前端开发领域中最受欢迎的JavaScript库之一,但有时候在编写React应用程序时,可能陷入一些不佳的习惯和错误做法。这些不佳的习惯可能导致性能下降、代码难以维护,以及其他问题。在本文中,我们将探讨日常工作中应该避免的9个坏React......
  • JavaScript复习记录(6)— 对闭包的理解,闭包使用场景
    闭包(Closure)指的是一个函数可以访问其外部作用域(即使这个函数是在外部作用域之外执行的)。换句话说,闭包是函数和声明该函数的词法环境的组合。闭包的形成闭包在以下情况下形成:当一个内部函数被保存到外部后,即使外部函数已经执行完毕,内部函数仍然可以访问外部函数中的变量。......
  • 工时记录软件对比:哪款适合你的企业?
    国内外主流的10款工时计算软件对比:PingCode、Worktile、Tita、易企秀、奇鱼、Teambition、Timely、TogglTrack、RescueTime、ClickUp。在忙碌的工作中,记录和管理工时常常是令人头疼的问题。工时记录软件的选择不仅能帮你省时省力,还能大幅提高团队的生产力。然而,市场上的工时记......
  • 基于SpringBoot的健身记录小程序设计和实现(源码+LW+调试文档)
     ......
  • nginx学习记录
    目录监听端口nginx缓冲和缓存缓冲优点与作用缓存优点与作用nginx负载均衡权重健康检查监听端口假设代码中,我监听8003端口,意味着我可以通过访问8003端口来获得数据将所有请求进行转发,即访问8003端口,nginx会将“访问8003端口”这一请求,转发到设定的地址这就实现了,访问的是8003......
  • jmter基本设置-第一次上手的记录
    一个线程组至少需要添加以下几个元件 添加http信息头管理器2.http请求默认值  3.添加断言 4.查看结果树.......
  • xhdra的使用记录
    XHydra是一个基于Hydra的分布式密码破解工具,用于进行暴力破解攻击。以下是在KaliLinux中使用XHydra的完整步骤和命令,以及一个示例:安装XHydra:在KaliLinux中,XHydra通常已经预装在系统中。如果没有安装,可以使用以下命令进行安装:sudoapt-getupdatesudoapt-getinstall......
  • xxl-job使用记录
    xxl-job对比@Scheduled的优势:xxl-job在分布式环境下不会重复执行,@Scheduled只适用单节点应用,不能在多节点环境用。xxl-job有页面,能传参,能配置多任务顺序执行1、github下载xxl-job项目 https://github.com/xuxueli/xxl-job/2、修改项目的配置文件,数据库,端口,日志路径等3、自己项......