鸿蒙应用ArkTS开发-利用axios进行网络请求(实现前后端交互)
引言:
我们上一章实现了简单的登录注册页面,今天小编来带着大家实现完整的登录注册功能。
一、后端的搭建
Spring Boot介绍:Spring Boot是一个用于简化Spring应用程序开发的开源框架。它通过自动配置、内置服务器和预设的最佳实践,极大地减少了配置和开发的复杂性。Spring Boot允许开发者快速创建独立的、生产级的Spring应用,而无需手动配置大量的设置。它内置了各种工具和组件,支持自动化的依赖管理、容器配置,并提供了广泛的生产监控功能。
1. 创建项目
在这里,小编使用的是Springboot搭建的后端,利用的是 IDEA(java编程语言的集成开发环境)
我们先将后端项目创建好,点击File->New->Project:
接着我们给项目命名,选择Maven的包管理器,JDK的版本要和java对应,最后点击下一步:
紧接着勾选如图的依赖项,最后点击创建:
创建项目完成后,项目的目录结构如下:
打开如图所示的配置文件进行配置:
代码如下:
# 指定服务器监听的端口号
server.port=8080
# 设置应用的上下文路径
server.servlet.context-path=/springboot
# 配置静态资源的位置,支持类路径和本地文件系统路径
spring.web.resources.static-locations=classpath:/templates,file:D:/java/data/
# MySQL数据库驱动类名
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 数据库连接URL,包括数据库地址、端口、数据库名及额外参数
spring.datasource.url=jdbc:mysql://localhost:3309/class1?characterEncoding=utf8&serverTimezone=UTC
# 数据库用户名
spring.datasource.username=root
# 数据库密码
spring.datasource.password=123456
# 数据源名称
spring.datasource.name=defaultDataSource
# MyBatis实体别名包位置
mybatis.type-aliases-package=com.example.sports.pojo
# MyBatis映射文件位置
mybatis.mapper-locations=classpath:mappers/*.xml
# 设置日志级别
logging.level.com.hnucm.springboot1=debug
之后我们导入依赖包,打开pom.xml文件,将以下代码导入:
代码如下:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.20</version>
</dependency>
导入后重新加载依赖:
2. 代码实现
让我们正式开始搭建接口:
2.1 pojo层
首先,我们在pojo层创建用户的实体类,右键pojo->New->java类:
实体类的属性为(id,name,password)注意,在上方加注解@Data,代码如下:
//我的测试类
package com.example.login.pojo;
import lombok.Data;
@Data
public class User {private int id;private String name;private String password;
}
2.2 dao层
之后我们来写mapper层(mapper层是用来与数据库进行交互),右键dao->New->java类,选择接口类:
mapper代码如下:
package com.example.login.dao;import com.example.login.pojo.User;
import org.apache.ibatis.annotations.Mapper;import java.util.List;@Mapper
public interface UserMapper {//查找所有用户List<User> findAllUsers();}
接下来我们写xml配置文件来进行sql语句的查询,右键resources->New->新建文件夹(包名为mappers,与配置文件中的名称一致):
xml文件代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- XML文档声明,指定XML文档的版本(1.0)和字符编码(UTF-8) -->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 文档类型定义(DTD),指定了当前XML文件遵循的DTD规范。这里指定的是MyBatis 3.0的DTD规范 --><mapper namespace="com.example.login.dao.UserMapper"><!-- 映射器(Mapper)的开始,定义了一个映射器。namespace属性指定了这个映射器的唯一命名空间,通常与对应的Java接口的全限定名一致 --><select id="findAllUsers" resultType="com.example.login.pojo.User"><!-- SQL查询语句,用于获取所有用户信息 -->select * from users</select>
</mapper>
<!-- 映射器(Mapper)的结束 -->
2.3 service层
service层用于处理从mapper拿到的数据:
package com.example.login.service;import com.example.login.pojo.User;import java.util.List;
//接口层
public interface UsersService {//查找所有用户List<User> findAllUsers();
}
impl:
package com.example.login.service.impl;import com.example.login.dao.UserMapper;
import com.example.login.pojo.User;
import com.example.login.service.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;
//实现类
@Service
public class UsersServiceImpl implements UsersService {@AutowiredUserMapper userMapper;@Overridepublic List<User> findAllUsers(){return userMapper.findAllUsers();}}
2.4 controller层
package com.example.login.controller;import com.example.login.pojo.User;
import com.example.login.service.UsersService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import java.util.List;@Slf4j
@Controller
public class UsersController {@AutowiredUsersService usersService;@PostMapping("userslist")public ResponseEntity<String> userslist(@RequestBody User user){//搜索前端传过来的用户名来搜索数据库的用户User loginUser = usersService.findByName(user.getName());if(loginUser == null){return ResponseEntity.ok("用户名不存在");}if(user.getPassword().equals(loginUser.getPassword())){return ResponseEntity.ok("success");}return ResponseEntity.ok("密码错误");}@PostMapping("adduser")public ResponseEntity<String> adduser(@RequestBody User user) {// 处理请求数据System.out.println(user.getName());usersService.addUser(user);// 返回响应return ResponseEntity.ok("success");}
}
至此,我们的后端架构基本构建完成,项目目录结构图如下:
我们打开数据库,运行LoginApplication主文件:
数据库如图所示:
3. 接口测试
我们利用postman进行接口测试:
GET方法,输入localhost:8080/springboot/usersList
或者打开浏览器,输入localhost:8080/springboot/usersList
接口测试通过,拿到Json数据。
这样的话,我们后端基本构建完成了。
二、前端完善
1. 网络权限的添加
1.1 网络权限
接着上次做的项目来做,我们先添加网络请求权限 ,打开module.json5文件,加入网络权限 :
"requestPermissions": [{"name": 'ohos.permission.INTERNET'}],
位置如图所示:
1.2 打开终端下载axiso并导入
(具体axios参考
OpenHarmony三方库中心仓)
输入:
ohpm install @ohos/axios
下载axios对应的三方库,如果这条命令失败,可能就是配置ohpm的环境变量。
ohpm install @ohos/axios
在首页导入axios
import axios from '@ohos/axios'
打开index.ets文件:
加入网路请求的代码:
await axios.get<UsersModel,AxiosResponse<UsersModel[]>,null>('http://192.168.214.180:8080/springboot/usersList').then((response: AxiosResponse<UsersModel[]>) => {// 获取到的数据赋值给users数组this.users=response.data;console.info('获取到的数据:'+JSON.stringify(this.users));}).catch((error: AxiosError) => {console.info('捕获到异常:',JSON.stringify(error));promptAction.showToast({message: '未连接到网络',duration: 3000,})}).then(()=> {// 总是会执行});
注意:http://xxxx:8080需要查看自己的IP地址:
方法:win+r,输入cmd:
输入ipconfig,查看IPv4地址:
2. 登录功能
接下来进行登录验证,将获取到的用户数据与输入框中的数据进行对比:
具体代码如下:
//用户名输入框的获取数据@State private inputName: string = ''//密码输入框的获取数据@State private inputPassword: string = ''@State private users: UsersModel[] = [];//获取后端用户数据,进行登录验证async loginCommit() {//使用axios读取用户列表 http://xxxx:8080/springboot/userslist'await axios.get<UsersModel,AxiosResponse<UsersModel[]>,null>('http://192.168.214.180:8080/springboot/usersList').then((response: AxiosResponse<UsersModel[]>) => {// 获取到的数据赋值给users数组this.users=response.data;console.info('获取到的数据:'+JSON.stringify(this.users));}).catch((error: AxiosError) => {console.info('捕获到异常:',JSON.stringify(error));promptAction.showToast({message: '未连接到网络',duration: 3000,})}).then(()=> {// 总是会执行});//登录验证for (let i=0;i<this.users.length;i++){if (this.users[i].name==this.inputName&&this.users[i].password==this.inputPassword){promptAction.showToast({message: '登陆成功',duration: 3000,})router.pushUrl({url:"pages/Success"})}else {console.log("登录失败")}}}
在登录按钮.oncilck()中调用loginCommit()方法
这样我们的登录功能就完成了。
Harmonyos登录演示
3. 注册功能
注册功能与登录功能类似,我就不具体的描述了,如果有不懂的小伙伴,可以私信小编哦。
相关文章:

鸿蒙应用ArkTS开发-利用axios进行网络请求(实现前后端交互)
引言: 我们上一章实现了简单的登录注册页面,今天小编来带着大家实现完整的登录注册功能。 一、后端的搭建 Spring Boot介绍:Spring Boot是一个用于简化Spring应用程序开发的开源框架。它通过自动配置、内置服务器和预设的最佳实践࿰…...

【开源】使用环信UIKit for uniapp 做一个IM即时聊天应用
环信单群聊 UIKit 是基于环信即时通讯云 IM SDK 开发的一款即时通讯 UI 组件库,提供各种组件实现会话列表、聊天界面、联系人列表及后续界面等功能,帮助开发者根据实际业务需求快速搭建包含 UI 界面的即时通讯应用。 本文教大家使用环信 uniapp UIKit 快…...

计算机网络知识点全梳理(一.TCP/IP网络模型)
目录 TCP/IP网络模型概述 应用层 什么是应用层 应用层功能 应用层协议 传输层 什么是传输层 传输层功能 传输层协议 网络层 什么是网络层 网络层功能 网络层协议 数据链路层 什么是数据链路层 数据链路层功能 物理层 物理层的概念和功能 写在前面 本系列文…...
神州数码DCME-320 online_list.php存在任意文件读取漏洞
免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...

神经网络基础-神经网络搭建和参数计算
文章目录 1.构建神经网络2. 神经网络的优缺点 1.构建神经网络 在 pytorch 中定义深度神经网络其实就是层堆叠的过程,继承自nn.Module,实现两个方法: __init__方法中定义网络中的层结构,主要是全连接层,并进行初始化。…...

Linux入门攻坚——41、Linux集群系统入门-lvs(2)
lvs-dr:GATEWAY Director只负责请求报文,响应报文不经过Director,直接由RS返回给Client。 lvs-dr的报文路线如上图,基本思路就是报文不会回送Director,第①种情况是VIP、DIP、RIP位于同一个网段,这样&…...
音视频入门基础:MPEG2-TS专题(17)——FFmpeg源码中,解析TS program map section的实现
一、引言 由《音视频入门基础:MPEG2-TS专题(16)——PMT简介》可以知道,PMT表(Program map table)由一个或多个段(Transport stream program map section,简称TS program map sectio…...
了解https原理,对称加密/非对称加密原理,浏览器与服务器加密的进化过程,https做了些什么
最开始的加密 浏览器与服务器之间需要防止传输的数据被黑客破解。因此,浏览器在发送数据时会对数据进行加密,并把加密的密钥(或密钥的某些部分)放在数据的某一个区域中。服务器收到数据后,会提取密钥并用它来解密数据…...
山西省第十八届职业院校技能大赛高职组 5G 组网与运维赛项规程
山西省第十八届职业院校技能大赛高职组 5G 组网与运维赛项规程 一、赛项名称 赛项编号:GZ035 赛项名称:5G 组网与运维 赛项组别:高职学生组、教师组 二、竞赛目的 2019 年 6 月 6 日,5G 牌照正式发放,标志着我国全面进…...
tcpdump编译 wireshark远程抓包
https://github.com/westes/flex/releases/download/v2.6.4/flex-2.6.4.tar.gz tar -zxvf flex-2.6.4.tar.gz ./configure CFLAGS-D_GNU_SOURCE make sudo make installwget http://ftp.gnu.org/gnu/bison/bison-3.2.1.tar.gz ./configure make sudo make install以上两个库是…...

Web开发 -前端部分-CSS
CSS CSS(Cascading Style Sheet):层叠样式表,用于控制页面的样式(表现)。 一 基础知识 1 标题格式 标题格式一: 行内样式 <!DOCTYPE html> <html lang"en"><head><meta…...

用 Python Turtle 绘制流动星空:编程中的璀璨星河
用 Python Turtle 绘制流动星空:编程中的璀璨星河 🐸 前言 🐸🐞往期绘画>>点击进所有绘画🐞🐋 效果图 🐋🐉 代码 🐉 🐸 前言 🐸 夜空中繁星…...

Java从入门到工作2 - IDEA
2.1、项目启动 从git获取到项目代码后,用idea打开。 安装依赖完成Marven/JDK等配置检查数据库配置启动相关服务 安装依赖 如果个别依赖从私服下载不了,可以去maven官网下载补充。 如果run时提示程序包xx不存在,在项目目录右键Marven->Re…...
fastadmin批量压缩下载远程视频文件
后端代码 // 批量下载并压缩 public function downloadAll(){$ids input(ids);$row $this->model->where(id, in, $ids)->field(id,title,video_url)->select();if (!$row) {$this->error(记录不存在);}$arr [];$tempFiles []; // 用来存储临时下载的视频文…...
【保姆级】Mac如何安装+切换Java环境
本文从如何下载不同版本的JDK,到如何丝滑的切换JDK,以及常见坑坑的处理方法,应有尽有,各位看官走过路过不要错过~~~ 下载⏬ 首先上官网: https://www.oracle.com/ 打不开的话可以使用下面👇这个中文的 https://www.oracle.com/cn/java/technologies/downloads/a…...

2024首届世界酒中国菜国际地理标志产品美食文化节成功举办篇章
2024首届世界酒中国菜国际地理标志产品美食文化节成功举办,开启美食文化交流新篇章 近日,首届世界酒中国菜国际地理标志产品美食文化节在中国国际地理标志大厦成功举办,这场为期三天的美食文化盛会吸引了来自世界各地的美食爱好者、行业专家…...

Springboot静态资源
默认位置 静态资源访问目录下的资源可以直接访问,默认的四个位置 classpath:/META-INF/resources/(默认加载,不受自定义配置的影响) classpath:/resources/ classpath:/static/ classpath:/public/ 如果在静态目录下存在favic…...
MTK修改配置更改产品类型ro.build.characteristics
文章目录 需求场景实际问题 参考资料解决方案MTK 修改方案修改点一:build\core\product_config.mk修改点二:build\make\core\main.mk修改是否成功,adb 验证 实战项目中解决案例 需求场景 更改产品设备属性 table-phone-device,使…...
SQL 查询中的动态字段过滤
这段代码是一个 SQL 查询中的动态字段过滤部分,使用了 MyBatis 的 标签和 标签。以下是逐步的解释: <!-- 动态字段过滤 --><if test"parameters ! null and parameters.size() > 0"><foreach collection"parameters&qu…...

数字IC后端零基础入门基础理论(Day1)
数字IC后端设计导入需要用到的input数据如下图所示。 数字后端零基础入门系列 | Innovus零基础LAB学习Day9 Netlist: 设计的Gate level(门级)网表。下图所示为一个计数器设计综合后的门级netlist。 从这个netlist中我们看到这个设计顶层的名字叫counte…...

Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...