创建一个简单的spring boot+vue前后端分离项目
一、环境准备
此次实验需要的环境: jdk、maven、nvm和node.js
开发工具:idea或者Spring Tool Suite 4,前端可使用HBuilder X,数据库Mysql
下面提供maven安装与配置步骤和nvm安装与配置步骤:
1、maven安装与配置
1.1 下载maven包
https://dlcdn.apache.org/maven/maven-3/3.9.5/binaries/apache-maven-3.9.5-bin.zip

1.2 解压到安装目录

1.3 将maven目录配置成环境变量

1.4 Cmd打开命令窗口,验证maven: mvn -v

1.5 配置setting文件 打开maven目录,找到conf目录下setting.xml ,修改默认仓库路径

二、nvm安装与配置
1、NVM简介
在项目开发过程中,使用到vue框架技术,需要安装node下载项目依赖,但经常会遇到node版本不匹配 而导致无法正常下载,重新安装node却又很麻烦。为解决以上问题,nvm:一款node的版本管理工 具,能够管理node的安装和使用,使用简单,可下载指定node版本和切换使用不同版本,方便了node 的使用。
2、NVM安装
2.1 下载
安装包下载地址: https://github.com/coreybutler/nvm-windows/releases
windows系统下载nvm-setup.exe

2.2 安装
双击nvm-setup.exe开始安装(安装之前最好卸载计算机已经安装的node)

选择nvm安装根路径

指定nodejs的安装路径(最好提前新建nodejs文件夹,在安装时选择)

2.3 测试
打开命令行,输入nvm -v 可查看版本,即安装成功

3、NVM使用
3.1 设置
设置下载源,修改setting.txt 在安装根路径下编辑setting.txt
添加以下两行镜像地址:
node_mirror:https://npm.taobao.org/mirrors/node/
npm_mirror: https://npm.taobao.org/mirrors/npm/

3.2 使用
1. nvm list available 显示可以安装的所有node.js的版本

2. nvm install 16.20.0 安装node.js的命名 version是版本
3. nvm list 查看已安装的node.js
4. nvm use 16.20.0 切换到使用指定的nodejs版本
*** 表示当前使用的node版本是16.20.0

3.3 NVM常用命令
nvm off // 禁用node.js版本管理(不卸载任何东西)
nvm on // 启用node.js版本管理
nvm install // 安装node.js的命名,version是版本号 例如:nvm install 8.12.0
nvm uninstall // 卸载node.js是的命令,卸载指定版本的nodejs,当安装失败时卸载使用
nvm ls // 显示所有安装的node.js版本
nvm list available // 显示可以安装的所有node.js的版本
nvm use // 切换到使用指定的nodejs版本
nvm v // 显示nvm版本
nvm install stable // 安装最新稳定版
3.4 NVM常见异常
1.nvm use失效 无法使用node
原因:在安装nvm的时候修改了nodejs的安装路径,但安装包并未在指定路径新建nodejs 解决:在指定路径手动新建nodejs文件夹,重新安装并指定路径
三、搭建前后端分离项目
1、后端项目
1.1 数据库设计

1.2 新建springboot工程
第一种方式使用idea创建,File —> New Project —> Spring Initializr ,选择对应的配置。

如果idea没有Spring Initializr ,或者本地jdk不支持Spring Initializr中jdk的选项可以采用第二种方式,访问https://start.aliyun.com/

选择对应的配置,获取代码,然后导入idea或Spring Tool Suite 4
1.3 项目结构以及代码
项目的总体结构如图:

pom.xml文件
<?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.8</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>springbootvue</artifactId><version>0.0.1-SNAPSHOT</version><name>springbootvue</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><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>2.2.1</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version></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>com.baomidou</groupId><artifactId>mybatis-plus-core</artifactId><version>3.5.3</version></dependency></dependencies><build><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource></resources><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>
application.yml
spring:datasource:username: rootpassword: 1qaz@WSX3edcurl: jdbc:mysql://localhost:3306/course2023?allowMultiQueries=true&characterEncoding=UTF-8&characterSetResults=UTF
8&zeroDateTimeBehavior=convertToNull&useSSL=falsedriver-class-name: com.mysql.cj.jdbc.Driverserver:port: 8181mybatis:type-aliases-package: com.example.springbootvue.entitymapper-locations: classpath:mapper/*.xml
UserController.java
package com.example.springbootvue.controller;import com.example.springbootvue.entity.user;import com.example.springbootvue.service.UserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController@RequestMapping("/user")public class UserController {@AutowiredUserService userService;@GetMapping("/findAll")public List<user> findAll() {return userService.queryuserList();}@GetMapping("/")public String test() {return "test";}
@PostMapping("/login")public user login(@RequestParam("username") String username,@RequestParam("password") String password) {return userService.queryUserByNameAndPwd(username, password);}}
user.java
package com.example.springbootvue.entity;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;@Data@NoArgsConstructor@AllArgsConstructorpublic class user {private Integer id;private String username;private String password;}
UserMapper.java
package com.example.springbootvue.mapper;import com.example.springbootvue.entity.user;import org.apache.ibatis.annotations.Mapper;import org.apache.ibatis.annotations.Param;import org.springframework.stereotype.Repository;import java.util.List;@Mapper@Repositorypublic interface UserMapper {public List<user> queryuserList();public user queryUserByNameAndPwd(@Param("username")String username,
@Param("password")String password);}
UserService.java
package com.example.springbootvue.service;import com.example.springbootvue.entity.user;import java.util.List;public interface UserService {public List<user> queryuserList();public user queryUserByNameAndPwd(String username,String password);}
UserServiceImpl.java
package com.example.springbootvue.service;import com.example.springbootvue.entity.user;import com.example.springbootvue.mapper.UserMapper;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.util.List;@Servicepublic class UserServiceImpl implements UserService{@AutowiredUserMapper userMapper;@Overridepublic List<user> queryuserList() {return userMapper.queryuserList();}@Overridepublic user queryUserByNameAndPwd(String username, String password) {return userMapper.queryUserByNameAndPwd(username,password);}}
usermapper.xml
<?xml version="1.0" encoding="UTF8"?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.example.springbootvue.mapper.UserMapper"><select id="queryuserList"
resultType="com.example.springbootvue.entity.user">select * from user</select><select id="queryUserByNameAndPwd"
resultType="com.example.springbootvue.entity.user">
select * from user where username=#{username} and password = #{password}</select>
</mapper>
CrosConfig.java
package com.example.springbootvue.config;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.CorsRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configurationpublic class CrosConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry){registry.addMapping("/**").allowedOriginPatterns("*").allowedMethods("GET","HEAD","POST","PUT","DELETE","OPTIONS").allowCredentials(true).maxAge(3600).allowedHeaders("*");}}
运行SpringbootvueApplication.java,启动成功后,在浏览器上面访问localhost:8181/user/

2、前端项目
2.1 创建vue项目
首先创建一个文件夹,在地址栏输入cmd,按回车键,会出现下面的命令行窗口

输入npm -v和node -v 查看是否安装

接着输入npm install -g @vue/cli来安装相关插件,如果出现如下图错误,是因为npm的官方源在国 外,下载很慢,下面我们将npm源切换成国内源。

下载淘宝镜像源:npm install -g cnpm --registry=https://registry.npm.taobao.org

把当前的源切换成淘宝的源:npm config set registry https://registry.npm.taobao.org
查看源是否切换成功:npm config get registry

继续安装npm install -g @vue/cli

安装好之后输入vue create myfirst(myfirst是你要创建的项目的名称),回车。然后进入下图界面,选 择第三个,回车。

接着选择下图所示选项(上下箭头移动,空格键选中),接着回车

然后后面按我下图所选的即可

接着会加载一段时间(稍微等待一下)

然后我们可以按它的提示输入:
cd myfirst
npm run serve
在浏览器输入生成的链接得到下图,此时vue项目搭建完成

2.2 构建一个简单的登录界面
修改router文件夹下面的index.js如下
import Vue from 'vue'import VueRouter from 'vue-router'import HomeView from '../views/HomeView.vue'import login from "@/views/login";Vue.use(VueRouter)const routes = [{path: '/',name: 'login',component: login},{path: '/home',name: 'home',component: HomeView},{path: '/about',name: 'about',component: () => import(/* webpackChunkName: "about" */
'../views/AboutView.vue')}]const router = new VueRouter({mode: 'history',base: process.env.BASE_URL,routes})export default router
修改views文件夹下面的HomeView.vue如下
<template><div class="home">{{ username }} 登录成功</div></template><script>export default {data() {return {}},created() {this.username = this.$route.query.username},}</script><style></style>
在views文件夹下创建login.vue
<template><div class="login"><div class="mylogin" align="center"><h4>登录</h4><el-form:model="loginForm":rules="loginRules"ref="loginForm"label-width="0px"><el-form-item label="" prop="account" style="margin-top: 10px"><el-row><el-col :span="2"><span class="el-icon-s-custom"></span></el-col><el-col :span="22"><el-inputclass="inps"placeholder="账号"v-model="loginForm.account"></el-input></el-col></el-row></el-form-item><el-form-item label="" prop="passWord"><el-row><el-col :span="2"><span class="el-icon-lock"></span></el-col><el-col :span="22"><el-inputclass="inps"type="password"placeholder="密码"v-model="loginForm.passWord"></el-input></el-col></el-row></el-form-item><el-form-item style="margin-top: 55px"><el-button type="primary" round class="submitBtn" @click="submitForm">登录</el-button></el-form-item><div class="unlogin"><router-link :to="{ path: '/forgetpwd' }"> 忘记密码? </router-link>|<router-link :to="{ path: '/register' }"><a href="register.vue" target="_blank" align="right">注册新账号</a></router-link></div></el-form></div></div></template><script>import { mapMutations } from "vuex";import axios from 'axios'export default {name: "Login",data: function () {return {loginForm: {account: "",passWord: "",},loginRules: {account: [{ required: true, message: "请输入账号", trigger: "blur" }],passWord: [{ required: true, message: "请输入密码", trigger: "blur" }],},};},methods: {...mapMutations(["changeLogin"]),submitForm() {const userAccount = this.loginForm.account;const userPassword = this.loginForm.passWord;const params = new URLSearchParams();params.append('username', userAccount);params.append('password', userPassword);// 发起一个post请求axios({method: 'post',url: 'http://localhost:8181/user/login',params: params}).then(resp=>{console.log(resp.data);if(resp.data != null && resp.data.id != null){this.$router.push('/home?username='+resp.data.username);}else{this.$message({message: '账户不存在或密码错误',type: 'warning'});}});console.log("用户输入的账号为:", userAccount);console.log("用户输入的密码为:", userPassword);},},};</script><style>.login {height: 100vh;background-image: linear-gradient(to bottom right, #3F5EFB, #42b983);overflow: hidden;width: 100vw;padding: 0;margin: 0;font-size: 16px;background-position: left top;background-color: #242645;color: #fff;position: relative;}.mylogin {width: 240px;height: 280px;position: absolute;top: 0;left: 0;right: 0;bottom: 0;margin: auto;padding: 50px 40px 40px 40px;box-shadow: -15px 15px 15px rgba(6, 17, 47, 0.7);opacity: 1;
background: linear-gradient(230deg,rgba(53, 57, 74, 0) 0%,rgb(0, 0, 0) 100%);}.inps input {border: none;color: #fff;background-color: transparent;font-size: 12px;}.submitBtn {background-color: transparent;color: #39f;width: 200px;}</style>
login.vue要用到axios和element-ui,所以我们要安装axios和element-ui
npm install axios
npm install element-ui -S
在main.js中引入element-ui
import ElementUI from 'element-ui';import 'element-ui/lib/theme-chalk/index.css';Vue.use(ElementUI);
axios可以在对应的页面引入
import axios from 'axios'
App.vue修改如下
<template><div id="app"><router-view/></div></template>
在终端输入指令npm run serve运行vue项目,点击生成的链接即可,然后输入账号和密码进行登录,登录后进入主页面

四、完成用户注册和查询功能
用户注册功能效果图如下:

点击注册新账号,跳转到注册页面

填写新账户密码,点击注册,注册成功之后跳转到登录页面,用新账户登录可以登录成功 查询功能效果:在登陆成功页面添加查询按钮

点击查询按钮,查询所有账户,效果如图所示

相关文章:
创建一个简单的spring boot+vue前后端分离项目
一、环境准备 此次实验需要的环境: jdk、maven、nvm和node.js 开发工具:idea或者Spring Tool Suite 4,前端可使用HBuilder X,数据库Mysql 下面提供maven安装与配置步骤和nvm安装与配置步骤: 1、maven安装与配置 1…...
Spring Boot项目@Cacheable注解的使用
Cacheable 是 Spring 框架中用于缓存的注解之一,它可以帮助你轻松地将方法的结果缓存起来,从而提高应用的性能。下面详细介绍如何使用 Cacheable 注解以及相关的配置和注意事项。 1. 基本用法 1.1 添加依赖 首先,确保你的项目中包含了 Spr…...
124.二叉树中的最大路径和 python
二叉树中的最大路径和 题目题目描述示例 1:示例 2:提示: 题解解决方案步骤Python 实现解释提交结果 题目 题目描述 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多…...
23.1 WebBrowser控件
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 WebBrowser控件类似于IE浏览器的文档界面(事实上IE也是使用的这个控件),它提供了显示网页及支持…...
vue 手写分页
【先看效果】 (1)内容小于2页 不展示页码 (2)1 < 内容页数< 限定展示页码 展示:页码、上下页;隐藏:首页、末页图标,上、下一区间码。即:(页数&#…...
位运算,双指针,二分,排序算法
文章目录 位运算二进制中1的个数题解代码我们需要0题解代码 排序模版排序1题解代码模版排序2题解代码模版排序3题解代码 双指针最长连续不重复子序列题解代码 二分查找题解代码 位运算 1. bitset< 16 >将十进制数转为16位的二进制数 int x 25; cout << bitset<…...
Typora软件(Markdown编辑器)详细安装教程(附补丁包)2025最详细图文教程安装手册
目录 前言:Typora是干什么的? 一、下载Typora安装包 二、安装Typora 1.运行安装程序 2.启动安装 3.创建桌面图标 4.开始安装 5.安装完成 三、安装补丁 1.解压补丁包 2.在解压后的补丁包目录下找到“winmm.dll” 3.复制“winmm.dll”到Typora安…...
图谱洞见:专栏概要与内容目录
文章目录 图谱洞见📚 核心内容模块时空图模型研究综述与模型对比交通流量预测 知识图谱理论研究预训练语言模型与知识图谱知识图谱补全与链接预测知识蒸馏与知识表示关系建模与图卷积上下文感知与参数生成规则学习与推理可解释性研究因果推理 知识图谱实践应用数据库…...
【拜读】Tensor Product Attention Is All You Need姚期智团队开源TPA兼容RoPE位置编码
姚期智团队开源新型注意力:张量积注意力(Tensor Product Attention,TPA)。有点像一种「动态的LoRA」,核心思路在于利用张量分解来压缩注意力机制中的 Q、K、V 表示,同时保留上下文信息,减少内存…...
【电机控制器】ESP32-C3语言模型——DeepSeek
【电机控制器】ESP32-C3语言模型——DeepSeek 文章目录 [TOC](文章目录) 前言一、简介二、代码三、实验结果四、参考资料总结 前言 使用工具: 提示:以下是本篇文章正文内容,下面案例可供参考 一、简介 二、代码 #include <Arduino.h&g…...
Linux修改主机名称
hostnamectl set-hostname 主机名称 exit 退出登录重新进入即可...
设计模式教程:解释器模式(Interpreter Pattern)
1. 什么是解释器模式? 解释器模式(Interpreter Pattern)是一种行为型设计模式,通常用于处理语言(例如数学表达式、SQL查询等)中的语法和解释。该模式定义了一个文法,并通过解释器类来解释文法中…...
STM32 看门狗
目录 背景 独立看门狗(IWDG) 寄存器访问保护 窗口看门狗(WWDG) 程序 独立看门狗 设置独立看门狗程序 第一步、使能对独立看门狗寄存器的写操作 第二步、设置预分频和重装载值 第三步、喂狗 第四步、使能独立看门狗 喂狗…...
一种简单有效的分析qnx+android智能座舱项目中的画面闪烁的方法(8155平台)
在智能座舱项目的开发过程中,画面闪烁问题是一个常见但棘手的挑战。由于这些闪烁现象往往转瞬即逝,传统的分析工具如截图、录屏或dump图层等方法难以捕捉和定位问题根源。针对这一难题,本文介绍了一种较为有效的分析方法,能够帮助…...
ESP32 websocket-client
本文简介 ESP-IDF WebSocket-Client 实验平台 ①ESP-IDF 版本:release/v5.3.2 ③硬件平台:esp32-s3 版权声明 ①作者:coLin ②声明:问题总结,有误解,请联系纠正。 正文 1、基于 esp-idf 如何使用 …...
MacOS下使用Ollama本地构建DeepSeek并使用本地Dify构建AI应用
目录 1 大白话说一下文章内容2 作者的电脑配置3 DeepSeek的本地部署3.1 Ollamal的下载和安装3.2 选择合适的deepseek模型3.3 安转deepseek 4 DifyDeepSeek构建Al应用4.1 Dify的安装4.1.1 前置条件4.1.2 拉取代码4.1.3 启动Dify 4.2 Dify控制页面4.3 使用Dify实现个“文章标题生…...
DeepSeek写俄罗斯方块手机小游戏
DeepSeek写俄罗斯方块手机小游戏 提问 根据提的要求,让DeepSeek整理的需求,进行提问,内容如下: 请生成一个包含以下功能的可运行移动端俄罗斯方块H5文件: 核心功能要求 原生JavaScript实现,适配手机屏幕 …...
DeepSeek 冲击(含本地化部署实践)
DeepSeek无疑是春节档最火爆的话题,上线不足一月,其全球累计下载量已达4000万,反超ChatGPT成为全球增长最快的AI应用,并且完全开源。那么究竟DeepSeek有什么魔力,能够让大家趋之若鹜,他又将怎样改变世界AI格…...
2025 WE DAY品牌日| 天璇II WE X7 Pro充电桩震撼发布,能效电气开启充电革命
随着新能源产业的迅猛发展,充电桩作为电动汽车能量补给的重要基础设施,正在成为市场关注的焦点。能效电气作为充电桩领域的佼佼者,专注于研发高效、智能的充电解决方案,为电动汽车的普及与可持续发展铺设了坚实的基础。 2025年2月21日,能效电气在深圳盛大举办了以“以创新 引未…...
agent和android怎么结合:健康助手,旅游助手,学习助手
agent和android怎么结合:健康助手,旅游助手,学习助手 创新点 智能交互创新:提出全新的agent - Android交互模式,如基于手势、语音、眼动等多模态融合的交互方式。例如让agent能够同时理解用户的语音指令和手势动作,在Android设备上提供更加自然和高效的交互体验,比如在…...
Python(二十二)实现各大跨境船公司物流查询CMA船司物流查询
一、前言 本章主要实现 【之前CMA船司物流信息查询】的遗留问题 解决思路 由于CMA船司查询需要进行[机器人验证] 方法1:直接从前端跳过,用selenium实现前端自动化,查询物流信息 方法2:捕捉到接口search,但需要将返回…...
Ollama 安装
Ollama 支持多种操作系统,包括 macOS、Windows、Linux 以及通过 Docker 容器运行。 Ollama 对硬件要求不高,旨在让用户能够轻松地在本地运行、管理和与大型语言模型进行交互。 CPU:多核处理器(推荐 4 核或以上)。GPU…...
C++ 设计模式-备忘录模式
游戏存档实现,包括撤销/重做、持久化存储、版本控制和内存管理 #include <iostream> #include <memory> #include <deque> #include <stack> #include <chrono> #include <fstream> #include <sstream> #include <ct…...
复习dddddddd
1. 思路:用队列先进先出的特性 #include <iostream> #include <vector> #include <stack> #include <cstdio> #include <algorithm> #include <cstring> #include <climits> #include <cstdlib> #include <cma…...
大数据技术Kafka详解 ⑥ | Kafka大厂面试题
目录 1、为什么要使用kafka? 2、kafka消费过的消息如何再消费? 3、kafka的数据是放在磁盘上还是内存上,为什么速度会快? 4、kafka数据怎么保障不丢失? 4.1、生产者数据的不丢失 4.2、消费者数据的不丢失 4.3、kafka集群中的broker的数据不丢失 5、采集数…...
Jupyter里面的manim编程学习
1.Jupyterlab的使用 因为我之前一直都是使用的vscode进行manim编程的,但是今天看的这个教程使用的是Jupyter,我也很是好奇这个manim在Jupyter这样的交互式下面会生成怎么样的效果,所以今天尝试了jupyter,并且对于两个进行比较和说…...
hot100_19. 删除链表的倒数第 N 个结点
hot100_19. 删除链表的倒数第 N 个结点 思路 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5] 示例 2: 输入:head […...
✨1.HTML、CSS 和 JavaScript 是什么?
✨✨ HTML、CSS 和 JavaScript 是构建网页的三大核心技术,它们相互协作,让网页呈现出丰富的内容、精美的样式和交互功能。以下为你详细介绍: 🦋1. HTML(超文本标记语言) 定义:HTML 是一种用于描…...
机器学习的数学基础(三)——概率与信息论
目录 1. 随机变量2. 概率分布2.1 离散型变量和概率质量函数2.2 连续型变量和概率密度函数 3. 边缘概率4. 条件概率5. 条件概率的链式法则6. 独立性和条件独立性7. 期望、方差和协方差7.1 期望7.2 方差7.3 协方差 8. 常用概率分布8.1 均匀分布 U ( a , b ) U(a, b) U(a,b)8.2 Be…...
flutter将utf-8编码的字节序列转换为中英文字符串
这里遇到的问题是,我通过某种方式拿到了utf-8编码的字节序列,我只知道他们对应的是中英文字符。怎么将其转成中英文,并打印,让我对utf-8编码有了些许许的了解。 这里记录一下转换代码: String wifiName \xE9\xA1\xB…...
