小程序(一)后端项目搭建
文章目录
- 一、创建spring boot项目
- 1、使用idea创建springboot项目:
- 2、勾选需要的依赖库
- 3、pom文件示例
- 4、配置application.yml
- 二、配置MyBatis
- 1、安装插件
- 2、创建IDEA数据库连接
- 3、配置MyBatis
- 4、自动生成
- 三、自定义异常类
- 1. 创建 com.buba.wechatmini.exception 包
- 2. 创建WechatminiException类
- 四、封装Web返回对象
- 1、添加依赖库
- 2、创建 com.buba.wechatmini.common.utils包,然后创建 Result 类
- 五、利用Swagger搭建 REST API
- 1、添加依赖库
- 2、创建Swagger配置类
- 3、配置yml
- 4、编写测试Web接口
- 5、测试Web接口
- 六、配置后端验证功能
- 七、抵御即跨站脚本(XSS)攻击
一、创建spring boot项目
1、使用idea创建springboot项目:
2、勾选需要的依赖库
3、pom文件示例
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.6</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.buba</groupId><artifactId>WeChatMiNi</artifactId><version>0.0.1-SNAPSHOT</version><name>WeChatMiNi</name><description>WeChatMiNi</description><properties><java.version>13</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><!-- <dependency>--><!-- <groupId>org.springframework.boot</groupId>--><!-- <artifactId>spring-boot-starter-data-mongodb</artifactId>--><!-- </dependency>--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-quartz</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- <dependency>--><!-- <groupId>org.springframework.amqp</groupId>--><!-- <artifactId>spring-rabbit</artifactId>--><!-- <version>3.0.1</version>--><!-- </dependency>--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.15</version></dependency><dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>3.3.0</version></dependency><!--shiro--><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring-boot-starter</artifactId><version>1.5.3</version></dependency><!--hutool jar--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.0.7</version></dependency><!--考虑到Hutool的非强制依赖性,因此zxing需要用户自行引入--><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.4.0</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.4.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.2</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpcore</artifactId><version>4.4.5</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>
4、配置application.yml
spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedruid:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3307/WeChatMiNi?useUnicode=true&serverTimezone=Asia/Shanghaiusername: rootpassword: 123456initial-size: 8max-active: 16min-idle: 8max-wait: 60000test-while-idle: truetest-on-borrow: falsetest-on-return: falsedata:redis:database: 0host: localhostport: 6379password:jedis:pool:max-active: 1000max-wait: -1msmax-idle: 16min-idle: 8main:allow-bean-definition-overriding: truemybatis:mapper-locations: classpath*:mappers/*.xmltype-aliases-package: com.buba.wechatmini.pojoconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #输出日志规则map-underscore-to-camel-case: true #支持驼峰命名
logging:level:root: infocom.example.emos.wx.db.dao : warnpattern:console: "%d{HH:mm:ss} %-5level %msg%n"WeChatMiNi:jwt:#密钥secret: buba123456#令牌期时间expire: 7#令牌缓存时间(天)cache-expire: 10
二、配置MyBatis
1、安装插件
2、创建IDEA数据库连接
3、配置MyBatis
mybatis:mapper-locations: classpath*:mappers/*.xmltype-aliases-package: com.buba.wechatmini.pojoconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #输出日志规则map-underscore-to-camel-case: true #支持驼峰命名
logging:level:root: infocom.example.emos.wx.db.dao : warnpattern:console: "%d{HH:mm:ss} %-5level %msg%n"
4、自动生成
三、自定义异常类
因为后台Java项目是Web工程,所以有异常消息,我们要在原有异常消息的基础之上,封装状态
码,所以需要我们自己创建一个异常类。
自定义异常类继承的父类,我没有选择Exception。因为Exception类型的异常,我们必须要手动
显式处理,要么上抛,要么捕获。我希望我定义的异常采用既可以采用显式处理,也可以隐式处
理,所以我选择继承RuntimeException这个父类。RuntimeException类型的异常可以被虚拟机隐
式处理,这样就省去了我们很多手动处理异常的麻烦。
1. 创建 com.buba.wechatmini.exception 包
2. 创建WechatminiException类
package com.buba.wechatmini.exception;/*** @author qlx*/
public class WechatminiException extends RuntimeException{private String msg;private int code = 500;public WechatminiException(String msg) {super(msg);this.msg = msg;}public WechatminiException(String msg, Throwable e) {super(msg, e);this.msg = msg;}public WechatminiException(String msg, int code) {super(msg);this.msg = msg;this.code = code;}public WechatminiException(String msg, int code, Throwable e) {super(msg, e);this.msg = msg;this.code = code;}}
四、封装Web返回对象
虽然SpringMVC的Controller可以自动把对象转换成JSON返回给客户端,但是我们需要制定一个
统一的标准,保证所有Controller返回的数据格式一致。最简便的办法就是定义封装类,来统一封
装返回给客户端的数据。
1、添加依赖库
修改 pom.xml 文件,添加依赖库。 Apache 的 httpcomponents 库里面的 HttpStatus 类封装了
很多状态码,所以我们在Web返回对象中封装状态吗,可以用到这些状态码。
<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpcore</artifactId><version>4.4.13</version></dependency>
2、创建 com.buba.wechatmini.common.utils包,然后创建 Result 类
package com.buba.wechatmini.common.utils;import org.apache.http.HttpStatus;import java.util.HashMap;
import java.util.Map;/*** @author qlx*/
public class Result extends HashMap<String, Object> {public Result() {put("code", HttpStatus.SC_OK);put("msg", "success");}public static Result error() {return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知异常,请联系管理员");}public static Result error(String msg) {return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg);}public static Result error(int code, String msg) {Result r = new Result();r.put("code", code);r.put("msg", msg);return r;}public static Result ok(String msg) {Result r = new Result();r.put("msg", msg);return r;}public static Result ok(Map<String, Object> map) {Result r = new Result();r.putAll(map);return r;}public static Result ok() {return new Result();}@Overridepublic Result put(String key, Object value) {super.put(key, value);return this;}
}
五、利用Swagger搭建 REST API
开发前后端分离架构的项目,往往调试后端Web接口需要用到POSTMAN工具。虽然POSTMAN
工具的功能非常强大,但是请求参数很多的情况下,我们手写这些参数和数据还是非常麻烦的。
因此我们需要一个调试后端Web接口更加简便的方法。恰好Swagger提供了REST API调用方
式,我们不需要借助任何工具的情况下,访问Swagger页面,就可以对Web接口进行调用和调
试,这种调试方式的效率要远超POSTMAN软件。
1、添加依赖库
在 pom.xml 文件中添加Swagger依赖库,这里我们使用的是Swagger2版本,在UI方面,比
Swagger1版本要好看很多。
<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version></dependency>
2、创建Swagger配置类
package com.buba.wechatmini.common.utils;/*** @author qlx*/import io.swagger.annotations.ApiOperation;
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.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.ApiSelectorBuilder;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;import java.util.ArrayList;
import java.util.List;@Configuration
@EnableSwagger2
public class SwaggerConfig {@Beanpublic Docket createRestApi() {Docket docket = new Docket(DocumentationType.SWAGGER_2);// ApiInfoBuilder 用于在Swagger界面上添加各种信息ApiInfoBuilder builder = new ApiInfoBuilder();builder.title("BUBA在线办公系统");ApiInfo apiInfo = builder.build();docket.apiInfo(apiInfo);// ApiSelectorBuilder 用来设置哪些类中的方法会生成到REST API中ApiSelectorBuilder selectorBuilder = docket.select();selectorBuilder.paths(PathSelectors.any()); //所有包下的类//使用@ApiOperation的方法会被提取到REST API中selectorBuilder.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class));docket = selectorBuilder.build();/** 下面的语句是开启对JWT的支持,当用户用Swagger调用受JWT认证保护的方法,* 必须要先提交参数(例如令牌)*///存储用户必须提交的参数List<ApiKey> apikey = new ArrayList();//规定用户需要输入什么参数apikey.add(new ApiKey("token", "token", "header"));docket.securitySchemes(apikey);//如果用户JWT认证通过,则在Swagger中全局有效AuthorizationScope scope = new AuthorizationScope("global", "accessEverything");AuthorizationScope[] scopeArray = {scope};//存储令牌和作用域SecurityReference reference = new SecurityReference("token", scopeArray);List refList = new ArrayList();refList.add(reference);SecurityContext context =SecurityContext.builder().securityReferences(refList).build();List cxtList = new ArrayList();cxtList.add(context);docket.securityContexts(cxtList);return docket;}
}
3、配置yml
Springboot2.6以后将SpringMVC 默认路径匹配策略从AntPathMatcher 更改为PathPatternParser,导致出错如下:
ERROR Application run failed org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException
解决上述问题需要application.yml配置如下
spring:mvc:pathmatch:matching-strategy: ant_path_matcher
4、编写测试Web接口
package com.buba.wechatmini.controller;import com.buba.wechatmini.common.utils.JwtUtil;
import com.buba.wechatmini.common.utils.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;/*** @author qlx*/
@RestController
@RequestMapping("/test")
@Api("测试Web接口")
public class TestController {@Autowiredprivate JwtUtil jwtUtil;@ApiOperation("最简单的测试方法")@GetMapping("/get1")public Result get1(){Map map = new HashMap();map.put("msa","aaaaaaa");return Result.ok(map);}@RequestMapping(value = "/getToken",method = RequestMethod.OPTIONS)public Result getToken() throws UnsupportedEncodingException {Map map = new HashMap();map.put("token",jwtUtil.createToken(123));return Result.ok(map);}
}
5、测试Web接口
浏览器访问地址:http://127.0.0.1:8080/swagger-ui.html
六、配置后端验证功能
七、抵御即跨站脚本(XSS)攻击
小程序(一)后端项目搭建相关推荐
- 微信读书登陆界面java_(JAVA后端)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好...
转载地址:(JAVA后端)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好 转载请注明出处 一.环境搭建 相关环境软件:JDK1 ...
- (微信小程序)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好
转载地址:(微信小程序)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好 转载请注明出处 作者:Happy王子乐 个人网站(整理 ...
- H5盲盒商城网站源码开发小程序抽奖系统商城搭建 VUE+PHP后台项目
这是H5盲盒商城网站源码开发小程序抽奖系统商城搭建 VUE+PHP后台项目(代码不加密,开源) 1.带推广二维码功能 2.含充值3级分销功能 3.盲盒回收成余/额功能 等功能 可以个性化定制开发等 源 ...
- 最新版养猫小程序前端+后端搭建详细教程
准备工作: 1.云服务器 2.备案域名 3.下载前端+后端源码:下载 4.微擎源码 5.注册微信小程序:https://mp.weixin.qq.com/ 6.下载微信开发者工具:点击下载 教程第一步 ...
- 小程序的豆瓣项目练习
小程序的豆瓣项目: 一. tabbar的布局实现 需要创建 pages/welcome board list item search mine 全局配置 -> tabBar ap ...
- 微信小程序开发15 项目实战 基于云开发开发一个在线商城小程序
在学完前 4 个模块之后,我相信你会对微信小程序的开发有一个全新的认识.在前面 3 个模块中,俊鹏分别从微信小程序内在的运行原理,小程序工程化开发以及具体实践层面,深度讲解了微信小程序开发所必要的知识 ...
- 实验室预约管理小程序前后端完整,包括实验室动态,实验室规章制度,预约审批,用户管理,基础实验室预约,专业实验室预约等功能
功能介绍 实验室预约管理小程序前后端完整,包括实验室动态,实验室规章制度,预约审批,用户管理,基础实验室预约,专业实验室预约等功能.目前部分高校实验室存在设备管理困难的问题,要使用设备可能需要在微信群 ...
- 小程序开发及环境搭建及发布
一.小程序开发及环境搭建 1.下载Hbuild X https://www.dcloud.io/hbuilderx.html 2.下载腾讯开发工具 https://q.qq.com/wiki/tool ...
- 微信小程序与后端Java接口交互-图书搜索实现
完整微信小程序(Java后端) 技术贴目录清单页面(必看) 我们模拟实现一个微信小程序端关键字图书,然后显示图书列表的功能,如下图: 实现大体思路,前端用户输入关键字,通过bindtap事件,事件里得 ...
- 微信运动步数:小程序+Java后端,源码可下载
微信运动步数:小程序+Java后端 更多资源:www.jeeweixin.com 功能说明: 1.获取和展示用户的微信运动步数,计算卡路里: 2.用户打开小程序即可实现步数打卡入库: 3.通过日历展示 ...
最新文章
- 记数据结构MOOC-二叉树
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- python用turtle画皮卡丘_用Python的turtle作画(2)——皮卡丘
- Spring Boot使用自定义的properties
- Java基础回顾Application(二)
- qt Graphic View 学习
- 构建词表与抽样——【torch学习笔记】
- pp助手可以刷机吗android,如何使用PP助手进行刷机?
- qt 二维数组初始化_C++数组初始化方法
- Linux的 ls 和 ll 的使用发放、基本区别
- Codeforces Contest 730 A Toda 2 —— 贪心
- 字节跳动年薪百万的测试开发=“半个产品+半个开发”?
- 石溪分校 计算机研究生专业,纽约州立大学石溪分校计算机科学硕士入学条件.pdf...
- 轻量级图像分类模型-MobileNetV3阅读笔记
- Android初识-Intent用法进阶篇
- Spring context:annotation-config/ 解说
- 2022年全球市场菱镁矿和水镁石总体规模、主要生产商、主要地区、产品和应用细分研究报告
- 湖南省计算机等级考试(二级)题库 第四部分
- 《python灰帽子》笔记四
- 国内垃圾渗滤液处理主要用什么手段呢?垃圾渗滤液的处理市场前景有吗?