swagger实战使用

实战项目-SwaggerUI使用 https://www.cnblogs.com/jockming/p/12233433.html 1:认识Swagger Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。 作用: 1. 接口的文档在线自动生成。 2. 功能测试。 Swagger是一组开源项目,其中主要要项目如下: Swagger-tools:提 阅读详情

引入依赖项,以下是gradle版本的libraries.gradle依赖文件的

ext {
    versions = [
            springFoxSwagger2: '2.9.2'
    ]

    libraries = [
            /**swagger**/
            swagger_bootstrap_ui          : "com.github.xiaoymin:swagger-bootstrap-ui:1.9.3",
            springfox_swagger2            : "io.springfox:springfox-swagger2:${versions.springFoxSwagger2}",
            springfox_swagger2_ui         : "io.springfox:springfox-swagger-ui:${versions.springFoxSwagger2}",
    ]
}

配置文件 application.yml 配置swagger开关

#swagger接口文档开关
swagger:
  enable: true
customer:
  env: TEST

swagger配置类

@EnableSwagger2
public class SwaggerConfig {

  @Bean
  public Docket createRestApi(@Value("${swagger.enable}") Boolean enable) {
    return new Docket(DocumentationType.SWAGGER_2)
        .genericModelSubstitutes(DeferredResult.class)
        .apiInfo(testApiInfo())
        .select()
        .apis(Predicates.or(
            RequestHandlerSelectors.withMethodAnnotation(TestDoc.class)
            , RequestHandlerSelectors.withClassAnnotation(TestDoc.class)
        ))
        .paths(PathSelectors.any())
        .build()
        .enable(enable);
  }

  private ApiInfo testApiInfo() {
    return
        new ApiInfo(
            "测试中心接口",
            "测试中心接口",
            "1.0.0",
            "API TERMS URL",
            new Contact("title", "", ""),
            "© 2021 title",
            "license url",
            new ArrayList<>());
  }
}

Doc

import org.springframework.stereotype.Component;
import java.lang.annotation.*;


@Target({ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface TestDoc {

}

项目启动后访问http://{IP地址}:{端口号}/doc.html即可访问

求一键三连(关注+点赞+转发),制作不易,谢谢,你的关注就是我最大的动力

用Swagger进行后端接口测试的实战操作 使用Swagger的时候,按照它的规范去定义接口以及接口相关的信息,就可以做到生成接口文档,以及在线接口调试页面。Knife4j是为Java MVC框架集成Swagger生成的Api文档的增强解决方案。注解说明@Api用在类上,说明该类的作用(例如Controller来表示对类的说明)注解来给API增加方法说明(例如Controller的方法来说明方法的用途与作用)@ApiModel。 阅读详情

相关推荐

Swagger3.0.0实战

springboot2.6.4+基于knife4j增强的Swagger3.0.0实现

Java__EE小白成长之路 6071

6.Swagger的实战使用

swagger是后端接口文档的生成并且提供ui界面进行测试过去用postman测试缺点:需要自己写地址,如果项目变了需要自己更改。

qq_44724899的博客 3250

Swagger 入门和实战

简介Swagger 是最流行的 API 开发工具,它遵循 OpenAPI Specification(OpenAPI 规范,也简称 OAS)。Swagger 可以贯穿于整个 API 生态,如 API 的设计、编写 API 文档、测试和部署。Swagger 是一种通用的,和编程语言无关的 API 描述规范。应用场景如果你的 RESTful API 接口都开发完成了,你可以用 Swagger-edit...

彳亍 2万+

Swagger2由入门到实战

一、为什么使用Swagger2 当下很多公司都采取前后端分离的开发模式,前端和后端的工作由不同的工程师完成。在这种开发模式下,维持一份及时更新且完整的 Rest API 文档将会极大的提高我们的工作效率。传统意义上的文档都是后端开发人员手动编写的,相信大家也都知道这种方式很难保证文档的及时性,这种文档久而久之也就会失去其参考意义,反而还会加大我们的沟通成本。而 Swagger 给我们提供了一个全新的维护 API 文档的方式,下面我们就来了解一下它的优点: 1、代码变,文档变。只需要少量的注解,Swagger

weixin_44874132的博客 5220

【Swagger】上手文档:前后端联调实战指南

前后端联调中好用的swagger文档上手介绍

silverclayz的技术分享 1349

8. Spring Boot 2.5 实战 API 帮助文档 Swagger

6)REST Assured 支持任何 HTTP 方法,但明确支持 POST,GET,PUT,DELETE,Spring REST Docs可以在线方便的调试自己的API,但是没有 Swagger 使用方便,行集成,现在使用 Spring Boot 项目做后端开发,写 API 的代码的机会比较多,咱们把。作为一个快速开发框架,是 Spring Boot 提供了自己的一套 API 的文档工具,目前。细的检索描述性,可以在线的发送 get、Post 等经典请求格式,很方便的去调接口,对。

天空鸟的博客 956

Swagger实战

ticketPar.name("Authorization").description("token")//Token 以及Authorization 为自定义的参数,session保存的名字是哪个就可以写成那个。//header中的ticket参数非必填,传空也可以。//访问 http://Ip:8080/swagger-ui.html。(心塞,都写完了直接503,操作失误往下的么保存起,难受,时间问题我直接贴图了)//配置了Swagger 的Docket的bean实例。//any():扫描全部。

qq_36089660的博客 275

用UDP协议在dos命令行里模拟一个聊天程序

/* 需求: 在dos命令行里模拟一个聊天程序 有收数据的部分,和发数据的部分,这两部分需要同时执行。 那就需要用到多线程技术。 一个线程控制收,一个线程控制发。 */ import java.io.*; import java.net.*; class C

s_x_x的记录 1955

全面掌握Swagger:从入门到实战

Swagger专栏全面解析API文档管理工具的使用与原理。专栏分为五大章节:基础入门介绍Swagger概念与环境搭建;高级注解实战讲解复杂场景下的文档精细化管理;原理剖析深入探讨Swagger工作机制与设计思想;实战应用展示Spring Boot项目中的RESTful API文档生成;性能优化与问题排查解决常见开发难题。通过理论讲解与代码示例相结合的方式,帮助开发者掌握从基础到高级的Swagger应用技巧,提升API开发效率,改善前后端协作。适合各层次开发者系统学习API文档管理的最佳实践。

fykam的博客 1288

用Origin快速拟合荧光寿命、PL Decay (TRPL)数据分析处理

用Origin快速拟合荧光寿命、PL Decay (TRPL)数据分析处理

A20802013的博客 2万+

手把手教你用LTspice仿真扬声器阻抗曲线(附Dayton/Focal型号库)

本文详细介绍了如何使用LTspice仿真软件构建高精度扬声器模型,包括获取Dayton/Focal等厂商的SPICE模型库、模型导入方法、阻抗测试电路搭建及仿真设置。通过手把手教学,帮助读者快速掌握扬声器阻抗曲线的仿真技术,提升音响系统设计效率。

weixin_26897585的博客 388

Java项目实战《苍穹外卖》 四、Swagger接口文档

本项目(苍穹外卖)是专门为餐饮企业(餐厅、饭店)定制的一款软件产品,包括系统管理后台和小程序端应用两部分。其中系统管理后台主要提供给餐饮企业内部员工使用,可以对餐厅的分类、菜品、套餐、订单、员工等进行管理维护,对餐厅的各类数据进行统计,同时也可进行来单语音播报功能。小程序端主要提供给消费者使用,可以在线浏览菜品、添加购物车、下单、支付、催单等。

yuan 4332

FOC无刷电机磁编码器机械角度与电角度自动对齐校准及电机极对数自动获取的方法

本文提出磁编码器机械角度与电角度自动对齐校准方法及电机极对数自动获取方案。通过通直流电流使转子定向,读取机械角度并计算电角度偏移量,实现精确对齐;同时利用低速旋转时检测反电动势过零点次数,结合机械角度变化量自动计算极对数。核心算法包括转子定向、偏移量计算、极对数推导等步骤,并提供了基于STM32的C语言实现代码。该方法适用于工业伺服、机器人等高精度控制场景,需注意负载安全、参数调整和误差处理。两种自动化流程可有效解决电机安装调试中的角度对齐和参数识别问题。

qq_29653575的博客 2481

Swagger 实战

构建API ControllerNameController.java @Api("用在类上,说明该类的作用") @Controller @RequestMapping("/api/ControllerName") public class ControllerNameController { @ApiOperation(value = "方法说明", notes = "注释,一般出现在...

DMW2016的博客 6258

SAP-ABAP:ABAP Development Tools(ADT)安装配置学习分享教程-第一篇:ADT安装前置准备与环境校验教程

ABAP Development Tools(ADT)安装配置教程摘要 本文是ADT安装系列的第一篇,重点讲解环境准备与版本校验。ADT是基于Eclipse的现代ABAP开发工具,相比传统SAP GUI提供更智能的开发体验。安装前需确认: 推荐使用Eclipse 2026-03 + Java 21组合 操作系统需Windows 10+/macOS 14+ SAP GUI版本要求Windows≥8.00/macOS≥8.10 后端系统需NetWeaver 7.31 SP04+或S/4HANA 通过java -

baidu_35680696的博客 685

SAP UI5 和 Fiori 的一些小技巧合集 - 持续更新中

本文介绍笔者从事 SAP UI5 和 Fiori 开发多年以来,积累的一些经验和小技巧。会保持更新。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 911

swagger2实战:springboot swagger2结合实战,swagger2入门教程

前言 swagger2 作为API接口生成的利器,极大的方便了前后端调试的成本。后端研发人员无需关注接口文档的梳理,可以以界面话的方式友好呈现出来。 实战 pom.xml文件引入jar包: <!-- 集成Swagger2接口测试工具(类似于postman) --> <dependency> <groupId>io.springfox</groupId> <artifact

penggerhe的博客 299

基于 ESP32 的分布式光伏微电网智能监控系统设计与实现

设备 / 模块连接 ESP32 引脚备注I2C 总线(SDA)GPIO21所有 I2C 设备共用I2C 总线(SCL)GPIO22所有 I2C 设备共用DS18B20(单总线)GPIO18单总线通信,需外接 4.7K 上拉电阻有源蜂鸣器GPIO19低电平触发,串联 100Ω 限流电阻ESP32 供电5V/GND由 LM2596 输出 5V 供电,或直接 USB 供电(调试阶段)INA219(光伏)光伏阵列正负极接 INA219 的 VIN+/VIN-

weixin_42300449的博客 303

swagger2实战

swagger2实战 一、概论 服务器提供的java服务越来越多,每个服务提供的接口的文档化和自动化可以省略很多不必要的功夫。swagger2提供了这个能力。 二、在线api swagger2通过在各Controller控制层加注解的方式,获取对每个接口的输入输出格式和http请求格式,整理成接口,前端 swagger-ui解析该接口数据并展示,还提供了对接口的测试功能。 1)  包依赖...

剑八的博客 2552

从 0 到 1 玩转小智 AI 智能音箱:开发教程 + 实战项目全攻略

如果说 MCP 是工具箱,那 SDK 就是 “技能模板”—— 小智音箱的自定义技能本质是 “意图识别 + 逻辑响应” 的组合,就像给嵌入式设备写驱动程序,只要按规则调用接口,就能实现各种功能。小智 AI 音箱的开发门槛并不高,核心是利用 MCP SDK 封装好的接口,结合嵌入式开发的 “硬件对接 + 逻辑编程” 思维,就能实现各种自定义功能。从环境搭建到技能开发,再到实战项目落地,每一步都是对 “软件控制硬件” 的实践 —— 而这正是嵌入式开发的核心魅力。

weixin_42300449的博客 1193

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Swagger从入门到实战

简单来说,Swagger 是一个接口文档生成工具。自动生成:根据你的代码自动生成接口文档实时更新:代码改了,文档自动跟着改在线测试:不用 Postman,直接在文档页面就能测试接口这就像是给你的接口装了一面"魔镜",代码长什么样,文档就长什么样。名称作用访问地址推荐度接口文档规范(标准)必须知道SpringDocSwagger 的 Spring Boot 实现(新)⭐⭐⭐⭐⭐ 强烈推荐SpringfoxSwagger 的 Spring Boot 实现(老)⭐⭐ 老项目才用Knife4j。

wx1035589113的博客 1037

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

打造美观 API 文档:Spring Boot + Swagger 实战指南

通过 Spring Boot 2 和 3 集成 Swagger,展示 Swagger UI、Redoc 和 Knife4j 风格,包含实战代码和配置技巧,提升 API 文档的交互性和美观度。

专注分享编程开发与技术进阶干货! 1716

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

flask-restful-swagger实战案例:构建Todo API并自动生成Swagger文档

flask-restful-swagger是一个为Flask-RESTful设计的Swagger规范提取工具,能够帮助开发者快速构建RESTful API并自动生成交互式API文档。本文将通过一个完整的Todo API实战案例,展示如何利用flask-restful-swagger实现API开发与文档自动化。 ## 快速入门:环境准备与项目搭建 ### 一键安装步骤 首先需要克隆项目仓库并安

gitblog_00121的博客 961

SpringBoot实战之一swagger

本文简要对swagger进行了介绍,并介绍了如何在springboot项目中集成swagger,swagger是优秀的api文档工具,对于它的其他使用后续在使用中进一步补充。

akenseren的博客 632

【springboot实战】springBoot+mybatisplus+swagger2

这里写自定义目录标题前言实践测试总结 前言 在公司的项目中用到了springboot,用到了swagger2这个api框架,持久层实现是jpa。小编结合项目中的框架,整合一下springboot+mybatisplus+swagger2. 实践 一、在idea里安装lombok和mybatisplus插件。 二、添加pom.xml文件依赖 <dependencies> ...

你若盛开,清风自来 1813

Swagger代码实战

什么是Swagger Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件。Swagger API文档工具可以满足下列需求: 支持项目中的API接口自动生成同步的在线文档。 生成的API文档可用于项目内部API审核,查看等。 通过Swagger实时的API接口同步功能,方便测试人员和接口调用者动态了解API及其变化。 这些文档可作为客户产品文档的一部分进行发布。 支持A...

huangbaoling66的博客 2445
上一篇: POI 导入导出工具类
下一篇: SpringBoot + Spring Cloud +Vue 管理系统前端搭建(二、visual studio code开发前端项目
Carl God
博客等级 码龄7年 1908粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Carl God

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值