springboot-swagger使用

简介: springboot-swagger使用

引入

  implementation('io.springfox:springfox-swagger2:2.9.2')
  implementation('io.springfox:springfox-swagger-ui:2.9.2')

Config

BaseSwaggerConfig
package com.blove.ityustudy.config;

import io.swagger.annotations.ApiOperation;
import  springfox.documentation.service.Parameter;
import org.springframework.context.annotation.Bean;

import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.ApiKey;
import springfox.documentation.service.AuthorizationScope;
import springfox.documentation.service.SecurityReference;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 文档配置
 *
 * @author lihe
 */
public abstract class BaseSwaggerConfig {


    private final static String TOKEN = "token";
    private final static String DEVICE_NO = "deviceNo";
    private final static String USER_ID = "userId";

    private final static String PASS_AS = "header";



    /**
     * 子类用于自定义接口参数
     *
     * @return api 配置
     */
    protected abstract ApiInfo apiInfo();


    @Bean
    public Docket createRestApi() {
        ParameterBuilder ticketPar = new ParameterBuilder();
        List<Parameter> pars = new ArrayList<>();
        Parameter parameter = ticketPar.name("Authorization").description("用户信息")
                .modelRef(new ModelRef("string")).parameterType("header")
                .required(false).build();//header中的ticket参数非必填,传空也可以
        pars.add(parameter);    //根据每个方法名也知道当前方法在设置什么参数

        List<SecurityContext> data = new ArrayList();
        data.add(securityContext());
        return new Docket(DocumentationType.SWAGGER_2)
                .securitySchemes(security())
                .securityContexts(data)
                .apiInfo(apiInfo())
                .globalOperationParameters(pars)
                .select()
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                .paths(PathSelectors.any())
                .build();
    }


    private Stream<String> getKeyStream(){
        return Stream.of(TOKEN, DEVICE_NO, USER_ID);
    }


    private List<ApiKey> security() {
        return  this.getKeyStream()
                .map(x -> new ApiKey(x, x, PASS_AS))
                .collect(Collectors.toList());
    }

    private SecurityContext securityContext() {
        return SecurityContext.builder()
                .securityReferences(defaultAuth())
                .forPaths(PathSelectors.any())
                .build();
    }

    private List<SecurityReference> defaultAuth() {
        AuthorizationScope authorizationScope
                = new AuthorizationScope("global", "accessEverything");
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
        authorizationScopes[0] = authorizationScope;
        return this.getKeyStream()
                .map(x -> new SecurityReference(x, authorizationScopes))
                .collect(Collectors.toList());
    }
}

Swagger2
package com.blove.ityustudy.config;

import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.swagger2.annotations.EnableSwagger2;


@Configuration
@EnableSwagger2
public class Swagger2  extends BaseSwaggerConfig{

    /**
     * 创建该API的基本信息(这些基本信息会展现在文档页面中)
     * 访问地址:http://项目实际地址/swagger-ui.html
     *
     * @return
     */
    @Override
    protected ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Ma-vendor-api")
                .description("Ma-vendor-api")
                .termsOfServiceUrl("http://www.build.com")
                .version("1.0.0")
                .build();
    }
}


使用

方法使用
  @ApiOperation(value = "获取用户信息")
    @ApiImplicitParams({ // 参数说明
            @ApiImplicitParam(name = "name", paramType = "query", value = "用户名字", dataType = "string", required = true),
            @ApiImplicitParam(name = "sex", paramType = "query", value = "性别", dataType = "Integer"),
            @ApiImplicitParam(name = "city", paramType = "query", value = "城市", dataType = "string"),
    })
    @PostMapping(value = "/getUser")
    @LimitIp(ip = "47.91.23.212")
    public R<UserModel> getUser(@RequestParam(value = "name") String name, @RequestParam(value = "sex", required = false) Integer sex, @RequestParam(value = "city", required = false) String city) {
        if (!StringUtils.isBlank(city)) {
            return RUtil.ok(new UserModel().setName(name).setAge(sex).setCity(city));
        }
        throw new CommonException("城市不能为空");
    }
属性使用
 @ApiModelProperty(value="状态吗",name="code",example="0")
    public int code;
    @ApiModelProperty(value="错误信息",name="msg",example="密码不对")
    public String msg;
    @ApiModelProperty(value="对象信息",name="data",example="")
    public T data;
类使用
@Data
@ApiModel(value="R",description="统一数据信息")
public class R<T> implements Serializable{
    @ApiModelProperty(value="状态吗",name="code",example="0")
    public int code;
    @ApiModelProperty(value="错误信息",name="msg",example="密码不对")
    public String msg;
    @ApiModelProperty(value="对象信息",name="data",example="")
    public T data;


}
相关文章
|
3月前
|
存储 人工智能 API
AI代理性能提升实战:LangChain+LangGraph内存管理与上下文优化完整指南
在AI代理系统开发中,上下文工程成为提升系统性能的关键技术。本文探讨了从提示工程到上下文工程的转变,强调其通过为AI系统提供背景信息和工具支持,显著提升智能化程度和实用价值。文章系统分析了上下文工程的理论基础、核心策略(如写入、选择、压缩和隔离),并结合LangChain和LangGraph工具,展示了如何实现上下文工程技术以优化AI代理性能。通过Scratchpad机制、内存管理、RAG系统集成、多代理架构及沙盒环境等技术手段,开发者可以更高效地构建高性能、可扩展的AI系统。
332 0
AI代理性能提升实战:LangChain+LangGraph内存管理与上下文优化完整指南
|
10月前
|
容器
【HarmonyOS】HMRouter使用详解(一)环境配置
在项目中使用官方推荐的Navigation时,需要在所有的页面上都添加一层NavDestination,在代码阅读上会增加多个层级,而且还要在主页面设置对应名字的跳转等问题,配置起来比较繁琐。看到大佬开发的HMRouter使用起来方便简洁,因此,写下这篇文章记录HMRouter的使用。
511 8
【HarmonyOS】HMRouter使用详解(一)环境配置
|
7月前
|
编解码 人工智能 缓存
轻装出海:一站式微短剧出海指南
轻装出海:一站式微短剧出海指南
442 0
|
存储 人工智能 数据管理
"AI大改造,让NAS焕发新生!智能分类、秒速检索、隐私守护、故障先知……你的数据存储神器全面升级,告别传统,拥抱未来智能NAS新纪元!"
【8月更文挑战第14天】大数据时代催生了对高效数据管理的需求,传统NAS面临挑战。AI技术的应用为NAS带来智能数据分类、内容分析检索、安全防护及预测性维护等功能。通过示例代码展示了AI如何简化数据管理、提升用户体验、保障数据安全及提高系统稳定性。集成AI的NAS正引领数据存储新时代。
473 3
|
JavaScript
Vue3滚动条(Scrollbar)
这是一个基于 Vue 的自定义滚动条组件 Scrollbar.vue,提供了丰富的配置选项和方法。通过参数如 `contentClass`、`size` 和 `trigger` 等,可以灵活控制滚动条的样式和行为。
495 1
Vue3滚动条(Scrollbar)
|
传感器 人工智能 算法
AI技术在智慧城市建设中的应用与前景
传统的城市规划和管理面临诸多挑战,如交通拥堵、资源浪费、环境污染等。随着人工智能技术的发展,其在智慧城市建设中的应用成为解决这些问题的关键。本文将探讨AI技术在智慧城市建设中的应用现状与前景,从智能交通管理、智能能源利用、智慧环境监测等方面进行分析,展望AI技术为智慧城市带来的巨大潜力与发展方向。
503 27
|
机器学习/深度学习 人工智能 算法
【AI大模型应用开发】3. RAG初探 - 动手实现一个最简单的RAG应用
【AI大模型应用开发】3. RAG初探 - 动手实现一个最简单的RAG应用
866 0
|
人工智能 前端开发 安全
springboot项目使用谷歌的kaptcha生成验证码超级简单
springboot项目使用谷歌的kaptcha生成验证码超级简单
311 0