当前位置: 首页 > news >正文

10年老兵带你学Java(第18课):Spring Boot 开发必备技能 - 支付/短信/文件上传/接口文档


本课目标

  • 掌握 Swagger + Knife4j 接口文档生成,提升开发协作效率
  • 掌握七牛云/阿里云OSS对象存储接入,实现图片/文件上传功能
  • 了解微信支付/支付宝支付对接流程
  • 了解短信验证码(阿里云短信)的对接方法

一、接口文档:Swagger + Knife4j

1.1 为什么需要接口文档?

在实际项目中,后端要给前端、APP、测试提供接口服务。如果靠口头交接或者写Word文档,效率低且容易出错。

Swagger是一个规范,它能自动根据代码注解生成 API 文档,还能在浏览器里直接测试接口。

1.2 引入 Knife4j

Knife4j 是 Swagger 的增强UI版,界面更美观,功能更强。

Maven 依赖:

<!-- Swagger3 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version></dependency><!-- Knife4j(增强UI)--><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>4.3.0</version></dependency>

配置文件:

spring:mvc:path match:matching-strategy:ant_path_matcher
@Configuration@EnableSwagger2@EnableKnife4jpublicclassSwaggerConfig{@BeanpublicDocketcreateRestApi(){returnnewDocket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.example.scanorder.controller")).paths(PathSelectors.any()).build();}privateApiInfoapiInfo(){returnnewApiInfoBuilder().title("扫码点餐系统 - 接口文档").description("提供菜品、订单、桌位等管理接口").version("1.0.0").build();}}

1.3 接口注解使用

@RestController@RequestMapping("/dish")@Api(tags="菜品管理")publicclassDishController{@GetMapping("/page")@ApiOperation(value="分页查询菜品",notes="支持按分类和名称筛选")@ApiImplicitParams({@ApiImplicitParam(name="current",value="当前页",dataType="Integer"),@ApiImplicitParam(name="size",value="每页条数",dataType="Integer"),@ApiImplicitParam(name="name",value="菜品名称",dataType="String")})publicResult<Page<Dish>>page(@RequestParam(defaultValue="1")Integercurrent,@RequestParam(defaultValue="10")Integersize,@RequestParam(required=false)Stringname){// ...returnResult.success(dishService.page(current,size,name));}}

启动项目后访问:

  • Swagger UI:http://localhost:8080/api/swagger-ui/
  • Knife4j:http://localhost:8080/api/doc.html

二、文件上传:OSS对象存储

2.1 为什么不用本地存储?

之前我们把图片存在服务器本地,但存在以下问题:

  • 服务器磁盘有限,大流量下容易爆满
  • 多台服务器时图片访问不一致
  • 服务器重启/迁移时文件丢失

解决方案:使用 OSS(对象存储)。国内常用:

  • 阿里云OSS(收费,但稳定)
  • 七牛云(10G免费,适合学习)
  • 腾讯云COS

2.2 七牛云上传示例

七牛云 SDK 依赖:

<dependency><groupId>com.qiniu</groupId><artifactId>qiniu-java-sdk</artifactId><version>7.14.0</version></dependency>

上传工具类:

@ComponentpublicclassQiniuOssUtil{@Value("${qiniu.access-key}")privateStringaccessKey;@Value("${qiniu.secret-key}")privateStringsecretKey;@Value("${qiniu.bucket}")privateStringbucket;@Value("${qiniu.domain}")privateStringdomain;// 例如:http://pd5k8pfp.bkt.clouddn.compublicStringupload(MultipartFilefile)throwsIOException{// 1. 构造凭证Authauth=Auth.create(accessKey,secretKey);Stringtoken=auth.uploadToken(bucket);// 2. 生成文件名StringoriginalFilename=file.getOriginalFilename();Stringext="";if(originalFilename!=null&&originalFilename.contains(".")){ext=originalFilename.substring(originalFilename.lastIndexOf("."));}Stringkey=UUID.randomUUID().toString().replace("-","")+ext;// 3. 上传UploadManageruploadManager=newUploadManager();Responseresponse=uploadManager.put(file.getBytes(),key,token);// 4. 返回访问地址returndomain+"/"+key;}}

Controller:

@PostMapping("/upload")publicResult<String>upload(@RequestParam("file")MultipartFilefile)throwsIOException{Stringurl=qiniuOssUtil.upload(file);returnResult.success("上传成功",url);}

三、短信验证码:阿里云短信

3.1 阿里云短信配置

  1. 注册阿里云账号,开通短信服务
  2. 申请签名和模板,拿到AccessKeyIdAccessKeySecret
  3. 记住模板CODE

依赖:

<dependency><groupId>com.aliyun</groupId><artifactId>dysmsapi20170525</artifactId><version>2.0.24</version></dependency>

发送工具类:

@ComponentpublicclassSmsUtil{@Value("${aliyun.sms.access-key-id}")privateStringaccessKeyId;@Value("${aliyun.sms.access-key-secret}")privateStringaccessKeySecret;publicvoidsendCode(Stringphone,Stringcode)throwsException{AlipayOpenApiClientclient=newAlipayOpenApiClient("https://dysmsapi.aliyuncs.com",accessKeyId,accessKeySecret);AlipayOpenApiSendSmsRequestrequest=newAlipayOpenApiSendSmsRequest();request.putQueryParameter("PhoneNumbers",phone);request.putQueryParameter("SignName","你的签名");request.putQueryParameter("TemplateCode","SMS_xxx");request.putBizContent("{\"code\":\""+code+"\"}");client棕.toAyncRequest(request);}}

四、下一课预告

下一课我们将学习Spring Cloud 微服务架构,了解如何将一个单体应用拆分为多个独立服务,实现高并发、高可用的分布式系统。

http://www.jsqmd.com/news/696133/

相关文章:

  • 保姆级教程:在粤嵌GEC6818开发板上用C语言搞定GY-39传感器数据采集(含完整代码)
  • PIVlab粒子图像测速:流体力学研究的终极开源解决方案
  • 别再只盯着芯片制程了!一文看懂从DIP到TSV的封装技术演进史
  • 别再只会用Word2Vec了!Google的Universal Sentence Encoder(USE)保姆级上手教程与实战对比
  • ACE-GF框架:跨密码学曲线的统一身份管理方案
  • 杭州财务公司哪家好?2026 杭州财税合规公司实力分析-杭州电商合规服务机构优选推荐 - 栗子测评
  • 专业实战指南:OpenCore Legacy Patcher高效解锁老旧Mac完整方案
  • 从库存到装箱都能自主决策,工厂大脑正在重新定义供应链管理
  • 梯度下降法:从数学原理到机器学习优化实践
  • 10年老兵带你学Java(第19课):微服务架构入门 - Spring Cloud 核心组件
  • Flux2-Klein-9B-True-V2应用场景:营销活动物料全链路AI生成解决方案
  • 【解构】DeepSeek V4 发布:技术报告深度解读 + 横向对比六大开源模型,我们的判断是……
  • 汽车电子工程师必看:手把手配置VNF1048F的SPI通信与保护阈值(附代码)
  • 辽宁钻石回收正规机构排行:营口钻石回收,营口黄金回收,葫芦岛奢侈品回收,铁岭奢侈品回收,排行一览! - 优质品牌商家
  • 膜片离合器设计(说明书+CAD图纸)
  • 基于改进麻雀搜索算法的配电网优化模型研究:考虑可转移负荷与分布式能源的综合成本分析,含结果图展示
  • 从LDPC到Polar码:5G时代信道编码技术选型实战与性能对比
  • Linux下VS Code调试C/C++项目:从preLaunchTask报错-1到构建流程精准配置
  • 2026不锈钢水箱源头厂家与模压板批发厂家全解析:从生产工艺、质量标准到采购合作的实用参考指南 - 栗子测评
  • 别再只画PCB了!用嘉立创EDA一站式搞定面板打印设计(附材料尺寸与图层详解)
  • Flutter Chat UI:构建高性能、可定制聊天界面的终极指南
  • 2026年评价高的高纯金属硅/铝合金铸造用金属硅生产厂家推荐 - 行业平台推荐
  • 10年老兵带你学Java(第20课):容器化与DevOps - Docker + CI/CD持续交付
  • 基于大语言模型的角色扮演聊天机器人:从架构到部署实战
  • 从GitHub到Tomcat:在麒麟V10上搭建一条龙自动化部署流水线
  • Jetson Nano + 双目摄像头:从零到一跑通ORB_SLAM2的完整避坑指南(Ubuntu 18.04)
  • 2026广东超易洁金丝绒瓷砖品牌推荐:防脱落瓷砖品牌优选指南 - 栗子测评
  • K近邻算法原理与实践:从基础到优化
  • 从Bootloader设计到APP跳转:深入理解STM32内存映射如何影响你的实际项目
  • 从依赖关系到执行序列:有向无环图(DAG)与拓扑排序的实战解析