10年老兵带你学Java(第18课):Spring Boot 开发必备技能 - 支付/短信/文件上传/接口文档
本课目标掌握 Swagger Knife4j 接口文档生成提升开发协作效率掌握七牛云/阿里云OSS对象存储接入实现图片/文件上传功能了解微信支付/支付宝支付对接流程了解短信验证码阿里云短信的对接方法一、接口文档Swagger Knife4j1.1 为什么需要接口文档在实际项目中后端要给前端、APP、测试提供接口服务。如果靠口头交接或者写Word文档效率低且容易出错。Swagger是一个规范它能自动根据代码注解生成 API 文档还能在浏览器里直接测试接口。1.2 引入 Knife4jKnife4j 是 Swagger 的增强UI版界面更美观功能更强。Maven 依赖!-- Swagger3 --dependencygroupIdio.springfox/groupIdartifactIdspringfox-boot-starter/artifactIdversion3.0.0/version/dependency!-- Knife4j增强UI--dependencygroupIdcom.github.xiaoymin/groupIdartifactIdknife4j-spring-boot-starter/artifactIdversion4.3.0/version/dependency配置文件spring:mvc:path match:matching-strategy:ant_path_matcherConfigurationEnableSwagger2EnableKnife4jpublicclassSwaggerConfig{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 接口注解使用RestControllerRequestMapping(/dish)Api(tags菜品管理)publicclassDishController{GetMapping(/page)ApiOperation(value分页查询菜品,notes支持按分类和名称筛选)ApiImplicitParams({ApiImplicitParam(namecurrent,value当前页,dataTypeInteger),ApiImplicitParam(namesize,value每页条数,dataTypeInteger),ApiImplicitParam(namename,value菜品名称,dataTypeString)})publicResultPageDishpage(RequestParam(defaultValue1)Integercurrent,RequestParam(defaultValue10)Integersize,RequestParam(requiredfalse)Stringname){// ...returnResult.success(dishService.page(current,size,name));}}启动项目后访问Swagger UIhttp://localhost:8080/api/swagger-ui/Knife4jhttp://localhost:8080/api/doc.html二、文件上传OSS对象存储2.1 为什么不用本地存储之前我们把图片存在服务器本地但存在以下问题服务器磁盘有限大流量下容易爆满多台服务器时图片访问不一致服务器重启/迁移时文件丢失解决方案使用 OSS对象存储。国内常用阿里云OSS收费但稳定七牛云10G免费适合学习腾讯云COS2.2 七牛云上传示例七牛云 SDK 依赖dependencygroupIdcom.qiniu/groupIdartifactIdqiniu-java-sdk/artifactIdversion7.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. 构造凭证AuthauthAuth.create(accessKey,secretKey);Stringtokenauth.uploadToken(bucket);// 2. 生成文件名StringoriginalFilenamefile.getOriginalFilename();Stringext;if(originalFilename!nulloriginalFilename.contains(.)){extoriginalFilename.substring(originalFilename.lastIndexOf(.));}StringkeyUUID.randomUUID().toString().replace(-,)ext;// 3. 上传UploadManageruploadManagernewUploadManager();ResponseresponseuploadManager.put(file.getBytes(),key,token);// 4. 返回访问地址returndomain/key;}}ControllerPostMapping(/upload)publicResultStringupload(RequestParam(file)MultipartFilefile)throwsIOException{StringurlqiniuOssUtil.upload(file);returnResult.success(上传成功,url);}三、短信验证码阿里云短信3.1 阿里云短信配置注册阿里云账号开通短信服务申请签名和模板拿到AccessKeyId和AccessKeySecret记住模板CODE依赖dependencygroupIdcom.aliyun/groupIdartifactIddysmsapi20170525/artifactIdversion2.0.24/version/dependency发送工具类ComponentpublicclassSmsUtil{Value(${aliyun.sms.access-key-id})privateStringaccessKeyId;Value(${aliyun.sms.access-key-secret})privateStringaccessKeySecret;publicvoidsendCode(Stringphone,Stringcode)throwsException{AlipayOpenApiClientclientnewAlipayOpenApiClient(https://dysmsapi.aliyuncs.com,accessKeyId,accessKeySecret);AlipayOpenApiSendSmsRequestrequestnewAlipayOpenApiSendSmsRequest();request.putQueryParameter(PhoneNumbers,phone);request.putQueryParameter(SignName,你的签名);request.putQueryParameter(TemplateCode,SMS_xxx);request.putBizContent({\code\:\code\});client棕.toAyncRequest(request);}}四、下一课预告下一课我们将学习Spring Cloud 微服务架构了解如何将一个单体应用拆分为多个独立服务实现高并发、高可用的分布式系统。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2551704.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!