微信小程序开发之微信小程序交互
目录
一、小程序交互
前端:
1、先在登陆界面中编写代码
2、在前端中编写js代码
后端:
1、先导入依赖:
2、定义好配置文件
3、编写好实体类
4、将帮助类进行配置
5、编写mapper类
6、定义service层以及对应的实现接口层
7、最后定义controller层
8、进行测试
一、小程序交互
步骤:
前端:
1、先在登陆界面中编写代码
login.wxml:
<view><image src="/png/b.jpg" mode="scaleToFill"/><view><input placeholder="请输入用户名" maxlength="13" bind:input="changeValue" data-label="account"/></view><view><input placeholder="请输入密码" password="{{true}}" bind:input="changeValue" maxlength="16" data-label="password"/></view><view><button bindtap="userLogin" type="primary">登录</button></view>
</view>
2、在前端中编写js代码
import {request} from "../../request/index";Page({data: {user: {account: "",password: ""}},changeValue(e) {let property = "user." + e.target.dataset.labellet value = e.detail.valuethis.setData({[property]: value})},userLogin() {wx.showLoading({title: "正在努力加载中",mask: false})request("/user/login", this.data.user).then(res => {console.log(res)wx.hideLoading()let icon = "error"if (res.data.code === 200) {icon = "success"}wx.showToast({title: res.data.message,icon})}).catch(res => {console.error(res)wx.hideLoading()})}
})
后端:
1、先导入依赖:
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></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>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>2.1.5</version></dependency><dependency><groupId>javax.persistence</groupId><artifactId>persistence-api</artifactId><version>1.0</version></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.4.1</version><configuration><mainClass>com.zking.mini_program.MiniProgramApplication</mainClass></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build>
2、定义好配置文件
server:port: 8080 spring:application:name: mini_programdatasource:driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: passwordurl: jdbc:mysql://127.0.0.1/wechat?useSSL=false&serverTimezone=Asia/Shanghai&useEncoding=utf8mb4
3、编写好实体类
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;import javax.persistence.*;
import java.io.Serializable;
import java.time.LocalDateTime;@Data
@Table(name = "t_user")
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@SuppressWarnings("all")
public class User implements Serializable {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String account;private String password;@Column(name = "modify_time")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime modifyTime;@Column(name = "create_time")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime createTime;}
4、将帮助类进行配置
1、JsonResponseParse:响应增强类,配合{@link JsonResponseResult}实现自定义快速返回
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;@SuppressWarnings("all")
@RestControllerAdvice
@Slf4j
/*** 响应增强类,配合{@link JsonResponseResult}实现自定义快速返回* beforeBodyWrite在{@link org.springframework.web.bind.annotation.ResponseBody}完成return之后并在消息解析器之前执行*/
public class JsonResponseParse implements ResponseBodyAdvice {@Override/*** 返回值决定他是否需要进入beforeBodyWrite*/public boolean supports(MethodParameter methodParameter, Class aClass) {/*methodParameter是当前执行返回响应的方法,判断在该类上是否存在对应的注解*/return methodParameter.getMethod().isAnnotationPresent(JsonResponseResult.class);}@Override/*** 用于修改返回前的值*/public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {if (o == null) {return ResponseResult.success();}if (o instanceof Integer) {return ResponseResult.failure(ResponseResultCode.queryCode((Integer) o));}if (o instanceof ResponseResultCode) {return ResponseResult.failure((ResponseResultCode) o);}if (o instanceof ResponseResult) {return o;}return ResponseResult.success(o);}}
2、json响应结果类
import java.lang.annotation.*;@SuppressWarnings("all")
@Retention(value = RetentionPolicy.RUNTIME)
@Documented
@Target({ElementType.METHOD})
/*** 此注解用于配合{@link JsonResponseParse}使用*/
public @interface JsonResponseResult {}
3、响应结果类
import lombok.Data;import java.io.Serializable;@Data
@SuppressWarnings("all")
public class ResponseResult<T> implements Serializable {private Integer code;private String message;private T data;private Long total;/*** 私有构造, 只允许通过static调用构造** @param resultCode 结果枚举* @param data 响应数据*/private ResponseResult(ResponseResultCode resultCode, T data) {this.code = resultCode.getCode();this.message = resultCode.getMessage();this.data = data;}/*** 私有构造, 只允许通过static调用构造** @param resultCode 结果枚举* @param data 响应数据* @param total 数据总大小(用于分页请求)*/private ResponseResult(ResponseResultCode resultCode, Long total, T data) {this.code = resultCode.getCode();this.message = resultCode.getMessage();this.data = data;this.total = total;}/*** 成功调用返回的结果(无数据携带)*/public static ResponseResult<?> success() {return success(null);}/*** 成功调用返回的结果(数据携带)** @param data 携带的数据*/public static <T> ResponseResult success(T data) {return new ResponseResult(ResponseResultCode.SUCCESS, data);}/*** 成功调用返回的结果(分页使用)** @param data 携带的数据* @param total 数据总条数*/public static <T> ResponseResult success(T data, Long total) {return new ResponseResult(ResponseResultCode.SUCCESS, total, data);}/*** 失败调用返回的结果(数据携带)** @param resultCode 状态枚举* @param data 携带的数据*/public static <T> ResponseResult failure(ResponseResultCode resultCode, T data) {return new ResponseResult(resultCode, data);}/*** 失败调用返回的结果(无数据携带)** @param resultCode 状态枚举*/public static ResponseResult failure(ResponseResultCode resultCode) {return failure(resultCode, null);}}
4、响应编码类:
import java.io.Serializable;@SuppressWarnings("all")
public enum ResponseResultCode implements Serializable {/* 正常状态 */SUCCESS(200, "成功"),FAILURE(300, "失败"),UNKNOWN(400, "未知错误"),/*** 用户code范围: 1000;*/USER_ACCOUNT_NOT_FIND(1001, "用户名不存在"),USER_ACCOUNT_DISABLED(1002, "该用户已被禁用"),USER_PASSWORD_NOT_MATCH(1003, "该用户密码不一致"),USER_PERMISSION_ERROR(1004, "该用户不具备访问权限"),USER_STATE_OFF_LINE(1005, "该用户未登录"),USER_CREDENTIAL_NOT_BE_EMPTY(1006, "用户的登录信息不能为空值"),USER_ACCOUNT_NOT_MOBLIE(1007, "该用户登录信息格式不符合"),USER_LOGIN_ERROR(1008, "登录失败"),/*** 其它异常: 4000;*/TRIKET_ERROR(4001, "triket失效,请重新登录"),/*** 商品异常: 6000;*/GOODS_ADD_ERROR(6001, "商品添加失败"),GOODS_EDIT_ERROR(6002, "商品修改失败"),GOODS_REMOVE_ERROR(6003, "商品删除失败");/*响应状态码*/private final Integer code;/*响应状态信息*/private final String message;/*此构造无法调用,用来定义常量枚举使用*/ResponseResultCode(Integer code, String message) {this.code = code;this.message = message;}/*** 此方法用于配合{@link JsonResponseParse}实现快速返回json类型响应码* 需要结合{@link JsonResponseResult}注解使用** @param code 响应码(对应枚举中的code,如无法找到则返回`UNKNOWN`)*/public static ResponseResultCode queryCode(Integer code) {for (ResponseResultCode value : values()) {if (code.equals(value.code)) {return value;}}return UNKNOWN;}public Integer getCode() {return code;}public String getMessage() {return message;}}
5、异常辅助类:
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestControllerAdvice;@SuppressWarnings("all")
@Slf4j
@RestControllerAdvice
public class ThrowableAdvice {/**@JsonResponseResult@ExceptionHandler(value = {BusinessException.class})public ResponseResultCode globalBusinessException(Model m, Exception e) {log.error(e.toString());return ((BusinessException) e).getResponseResultCode();}@JsonResponseResult@ExceptionHandler(value = {BindException.class})public ResponseResultCode globalBindException(Model m, Exception e) {log.error(e.toString());BindException error = (BindException) e;return (ResponseResultCode) error.getFieldError().getArguments()[1];}@JsonResponseResult@ExceptionHandler(value = {Throwable.class})public ResponseResultCode globalException(Model m, Exception e) {log.error(e.toString());return ResponseResultCode.UNKNOWN;}**/}
5、编写mapper类
@SuppressWarnings("all")
@Repository
public interface UserMapper extends Mapper<User> {}
6、定义service层以及对应的实现接口层
service:
@SuppressWarnings("all")
public interface IUserService {ResponseResult<?> findUserByAccount(User user);}
其中ResponseResult<?>响应结果类,中的?是可以随便放什么类的
E:一个集合的元素
K:键
V:值
T:类
7、最后定义controller层
@SuppressWarnings("all")
@RequestMapping("/user")
@RestController
public class UserController {@Autowiredprivate IUserService userService;@RequestMapping("/login")public ResponseResult<?> login(@RequestBody User user) {return userService.findUserByAccount(user);}}
8、进行测试
输入账号和密码进行登录
成功!
输入错误密码就会显示和该用户密码不统一
今天的知识就分享到这了,希望能够帮助到你!
微信小程序开发之微信小程序交互相关推荐
- 微信小程序开发实现微信支付
微信支付是时下最流行的交易支付方法之一,潜移默化推动着无现今社会的变革.小程序作为微信上的轻应用,同时也开放微信支付的接口,可以通过转账,扫二维码支付.要完成一次具体的订单支付需要完整的支付流程,具体 ...
- 微信小程序开发(一) 微信登录流程
文/YXJ 地址:http://blog.csdn.net/sk719887916/article/details/53761107 最近在研究微信小程序开发,非常有意思的一个东西.花了一点时间写了一 ...
- 小程序开发教程、小程序资讯、小程序demo、小程序实战等合揖(7月19日更新)
7月19日微信小程序联盟更新的小程序开发教程.小程序资讯.小程序demo.小程序实战内容合揖如下: 小程序资讯与小程序教程 一张图带你看懂小程序发展蓝皮书 2017-07-19 微信小程序开发问答&l ...
- 小程序开发教程、小程序资讯、小程序demo、小程序实战等合揖(7月19日更新)...
2019独角兽企业重金招聘Python工程师标准>>> 7月19日微信小程序联盟更新的小程序开发教程.小程序资讯.小程序demo.小程序实战内容合揖如下: #小程序资讯与小程序教程 ...
- 微信公众平台开发[3] —— 微信公众号支付功能(PHP)
直言无讳,我就是一个初涉微信开发的小白,写这篇博客的原因:一是为了给自己做下备忘记录,以便以后能回忆这条程序猿的坎坷路:二是希望能帮助到同是自学开发的小白们:三是对那些不屑一顾于我等尘埃的大牛们的控诉 ...
- 视频教程-基于python的微信公众号开发教程-微信开发
基于python的微信公众号开发教程 微信企业号星级会员.10多年软件从业经历,国家级软件项目负责人,主要从事软件研发.软件企业员工技能培训.已经取得计算机技术与软件资格考试(软考)--"信 ...
- 微信公众 mysql回复图片_微信公众号开发之微信公共平台消息回复类实例
本文实例讲述了微信公众号开发之微信公共平台消息回复类.分享给大家供大家参考.具体如下: 微信公众号开发代码我在网上看到了有不少,其实都是大同小义了都是参考官方给出的demo文件进行修改的,这里就给各位 ...
- 视频教程-微信公众平台开发入门-微信开发
微信公众平台开发入门 订阅后,请点击此处观看大牛全套视频课程:课程播放页链接 价格可能因活动略有浮动 刘运强 ¥39.00 立即订阅视频课 订阅后:请点击此处观看视频课程 视频教程-微信公众平台开发入 ...
- 微信公众平台开发[2] —— 微信端分享功能
背景 初次尝试微信公众号的开发,对于学习方法的探索都是来源于网上的博客.问答,对于参差不齐的信息,自己也是有苦说不出,抽出一点时间写点文章,既是对自己的学习总结,也希望给予同是菜鸟的小白一点帮助. 今 ...
- 微信公众号开发之微信公众平台与公众号第三方平台区别
微信公众号开发分为微信公众平台和公众号第三方平台. 首先需要一个认证服务号,然后在设置,基本配置里面配置公众号开发信息和服务器配置. 这是我们会得到开发者ID(AppID),开发者密码(AppSecr ...
最新文章
- 17、mybatis两个内置参数
- 操作方法:具有多个Mongo存储库和Kotlin的Spring Boot 2 Web应用程序
- C++网络编程快速入门(二):Linux下使用select演示简单服务端程序
- 【浙江大学PAT真题练习乙级】1008 数组元素循环右移问题 (20分)真题解析
- MapReduce计算模型(二)
- 将php中stat()得到的文件权限转成Linux形式
- 2010年“最具全球竞争力中国公司20强”榜单:
- Atitit rpc之道 attilax著 艾龙 著 1. 远程过程调用协议	1 2. 历史	2 2.1. RPC的早期发展	3 3. RPC这种编程范式存在的三大问题以及这些问题	5 3.1.
- 细说PHP电子书pdf下载
- JAVA多线程设计模式篇 4、Guarded Suspension 模式——等我准备好了再来
- 前端批量生成二维码并打包下载
- 【干货】SSM,Jquery, Bootstrap从零打造一个论坛系统
- Windows——就近共享
- 双层循环遍历 减少时间复杂度
- linux上php读取和创建word文档
- 6.mtk 带升压ic的insell屏点亮
- 谈论 ModSecurity 和新的 Coraza WAF
- 怎样用js实时获取浏览器的内存占用情况?
- linux环境基本操作,Linux系统基本操作
- 院内决赛总结 and 海大朗讯杯总结