当前位置: 首页 > news >正文

springboot实战学习(9)(配置mybatis“驼峰命名“和“下划线命名“自动转换)(postman接口测试统一添加请求头)(获取用户详细信息接口)

  • 接着学习。之前的博客的进度:完成用户模块的注册接口的开发以及注册时的参数合法性校验、也基本完成用户模块的登录接口的主逻辑的基础上、JWT令牌"的组成与使用以及完成了"登录认证"(生成与验证JWT令牌)具体往回看了解的链接如下。

springboot实战学习(8)(登录接口中使用“JWT令牌“完成登录认证)(拦截器的创建与注册)-CSDN博客文章浏览阅读525次,点赞10次,收藏6次。本篇博客主要学习和介绍了如何使用拦截器,去实现用户未登录时,用户不能访问其它接口(除了登录、注册)。其中先是进行简单粗暴的每个方法中直接完成JWT令牌的生成与校验。后面改变策略,使用拦截器处理所有接口的JWT令牌的生成和校验。所有的测试因为还未完成前端,所以都在postman中测试后端的接口,查看响应回来的数据......https://blog.csdn.net/m0_74363339/article/details/142463934?spm=1001.2014.3001.5501

  • 在已完成开发注册、登录的接口的前提下。这篇博客主要完成获取用户详细信息。

目录

一、明确需求

(1)部分展示(最终需要完成的)

二、查看接口文档

(1)基本的信息(请求路径、请求方式、描述)

(2)请求参数(无)

(3)响应数据。

三、实现思路

(1)UserController层

(2)UserService层

(3)UserMapper层

四、开始操作

(0)Result类与JWT令牌工具类

(1)回到UserController类中

(2)重启工程。回到postman开始测试。

(I)测试结果。请求成功!

(II)postman中测试时,集合(Collections)一下的所有接口都可以统一添加相同请求头。

(3)问题与解决

.yml配置文件中配置mybatis“开启驼峰命名——>下划线命名的自动转换”。


一、明确需求

(1)部分展示(最终需要完成的)
  • 当用户登录成功后,需要跳转到首页。
  • 首页的导航栏这一块,需要展示用户的昵称、头像等。像这样的数据都需要访问后台的接口才能获取。
  • 在个人中心这部分。有个人基本资料、更新头像、重置密码等等。像这些功能都需要先查询展示,然后再进行更新。所以也需要获取用户的详细信息。

二、查看接口文档

(1)基本的信息(请求路径、请求方式、描述)

(2)请求参数(无)
(3)响应数据。
  • 响应数据依然是"code"、"message"、"data"。
  • data对应的object类型的数据。如下面的响应数据样例。它有一个大括号,是一个对象。里面有("id"、"username"、"nickname"(昵称)、email、userPic(邮箱地址)、创建和更新时间)。

三、实现思路

(1)UserController层
  • 同样,也需要在类'"UserController"里面声明一个方法。方法上边添加注解@GetMapping,因为现在是一个get请求。
  • 指定的映射路径是:"/userInfo"。
  • 而且在方法的内部,需要根据用户名去查询。注意:该用户名是已登录的用户名。
  • 注意这个用户名的获取方式!!虽然这里没有请求参数,但是我们所有的接口都要求用户携带token令牌。而且程序在登录时生成的"JWT令牌"里面存放了用户的id和username。则用户名可以从token中获取
  • 所以要在方法里声明一个参数。名为"Authorization"的请求头,有了token后,就可以解析token,然后获取到用户名了。

(2)UserService层

之前已经完成

(3)UserMapper层

之前已经完成

四、开始操作

(0)Result类与JWT令牌工具类
package com.feisi.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;//统一响应结果
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Result<T> {private Integer code;//业务状态码  0-成功  1-失败private String message;//提示信息private T data;//响应数据//快速返回操作成功响应结果(带响应数据)public static <E> Result<E> success(E data) {return new Result<>(0, "操作成功", data);}//快速返回操作成功响应结果public static Result success() {return new Result(0, "操作成功", null);}public static Result error(String message) {return new Result(1, message, null);}
}

package com.feisi.utils;import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;import java.util.Date;
import java.util.Map;public class JwtUtil {private static final String KEY = "feisi";//接收业务数据,生成token并返回public static String genToken(Map<String, Object> claims) {return JWT.create().withClaim("claims", claims).withExpiresAt(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 12)).sign(Algorithm.HMAC256(KEY));}//接收token,验证token,并返回业务数据public static Map<String, Object> parseToken(String token) {return JWT.require(Algorithm.HMAC256(KEY)).build().verify(token).getClaim("claims").asMap();}}
(1)回到UserController类中
  • 添加一个方法userInfo()。注意返回值类型为Result<User>,因为到时侯返回的是User对象。并且添加一个注解@GetMapping("/userInfo")。

  • 要得到用户名,就在参数列表里面声明一个String类型的token。然后给这个参数加上注解@RequestHeader(name= "Authorization")

  • 有了token就去解析它。
  • 解析token就要使用自己提供的工具类"JwtUtil"的方法"parseToken()"。把token传给它,它会返回一个业务数据的Map集合。
  • 并且用map.get()方法获取指定键的值。因为存的时候是字符串,所有强转为String类型的。
@GetMapping("/userInfo")public Result<User> userInfo(@RequestHeader(name = "Authorization") String token){//方法内部根据用户名查询用户Map<String, Object> map = JwtUtil.parseToken(token);String username = map.get("username").toString();//拿到username就去调用service层的据用户名查询用户方法User user = userService.findByName(username);return Result.success(user);}
(2)重启工程。回到postman开始测试。
(I)测试结果。请求成功!


(II)postman中测试时,集合(Collections)一下的所有接口都可以统一添加相同请求头。
  • 因为在postman测试时,请求头的参数与值总是每个都要重新写,很麻烦。
  • 可以直接去集合然后点击Scripts——>"Pre-request"(请求前的一个脚本)。

  • 在这里写上指定的东西即可。记得写完ctrl+s(保存一下)。
  • 到时候这个集合下的所有接口请求都会自动的把这个头携带给服务器。
  • 所有自己之前写的就不需要携带请求头了。然后当token令牌的时间过期了,也能重新登录,然后复制粘贴到这里,所有的请求就能直接快速用了。

(3)问题与解决
  • 我们发现,请求回来的数据,携带了密码。这是不安全的

  • 这就要用到spring提供的对应的注解去解决这个问题了。
  • 添加注解@JsonIgnore。作用是:springmvc把当前对象转换成json字符串的时候,忽略password,最终的json字符串中就没有password这个属性了。
  • 注意这个注解导的包要是下面这个,不然不生效。
import com.fasterxml.jackson.annotation.JsonIgnore;

  • 我们通过上面发现返回的data值,里面的email与nickname(昵称)没有值。是因为在注册的时候,只让用户填写用户名与密码。这些是当用户修改个人资料的时候就有值了。这样设置是为了用户能够快速的注册。

  • 可以看到数据库中的表user中字段"create_time"、"update_time"的创建时间都有,为啥返回的数据data中"createTime"、"updateTime"却为"null"?

  • 因为数据库里面的命名是以下划线命名,而实体类User中的变量是驼峰命名。这时候mybatis不知道咋去封装数据。
  • .yml配置文件中配置mybatis“开启驼峰命名——>下划线命名的自动转换”。

  • 映射下划线——>驼峰命名

  • 这样mybatis就会发现数据库里面的下划线字段就会去实体类找一个对应的驼峰命名

  • 重新启动springboot工程。再去postman测试。这时就对了!

相关文章:

springboot实战学习(9)(配置mybatis“驼峰命名“和“下划线命名“自动转换)(postman接口测试统一添加请求头)(获取用户详细信息接口)

接着学习。之前的博客的进度&#xff1a;完成用户模块的注册接口的开发以及注册时的参数合法性校验、也基本完成用户模块的登录接口的主逻辑的基础上、JWT令牌"的组成与使用以及完成了"登录认证"&#xff08;生成与验证JWT令牌&#xff09;具体往回看了解的链接…...

之前做了抵押贷款,现在房市不景气,马上贷款要到期了该怎么办?

面对房贷的重压&#xff0c;特别是对于那些正承受高息贷款之苦的现有房产业主而言&#xff0c;探索有效的减负策略显得尤为重要。今天&#xff0c;我们共同探讨几种智慧策略&#xff0c;旨在帮助您巧妙减轻房贷的经济负担。 一、优化贷款结构&#xff1a;低息置换的魔力 当前&a…...

poi生成的ppt,powerPoint打开提示内容错误解决方案

poi生成的ppt&#xff0c;powerPoint打开提示内容错误解决方案 最近做了ppt的生成&#xff0c;使用poi制作ppt&#xff0c;出现一个问题。微软的powerPoint打不开&#xff0c;提示错误信息 通过xml对比工具发现只需要删除幻灯片的某些标签即可解决。 用的是XML Notepand 分…...

基于stm32物联网身体健康检测系统

在当今社会&#xff0c;由于经济的发展带来了人们生活水平不断提高&#xff0c;但是人们的健康问题却越来越突出了&#xff0c;各种各样的亚健康随处可在&#xff0c;失眠、抑郁、焦虑症&#xff0c;高血压、高血糖等等侵袭着人们的健康&#xff0c;人们对健康的关注达到了一个…...

BeautifulSoup4在爬虫中的使用

一、Beautiful Soup4简介 Beautiful Soup 提供一些简单的python函数来处理导航、搜索等功能。 它是一个工具箱&#xff0c;是python的一个库&#xff0c;最主要的功能是从网页获取数据。 二、Beautiful Soup4安装 在cmd下安装 pip install beautifulsoup4三、BeautifulSou…...

Laya2.x出包alipay小游戏

小游戏开发者工具&#xff0c;支付宝官方已经出了&#xff0c;不说了。 1.LAYA2.X打出得小游戏包中my-adapter.js这个文件需要替换&#xff0c;或者自行修改&#xff0c;替换3.x得&#xff1b; 2.unity导包出得模型文件命名需要注意&#xff0c;避免太长&#xff0c;路径也不…...

Vue极简入门

1.注册路由&#xff0c;如果是子路由&#xff0c;就加一个children import Vue from vue import Router from vue-router import Main from ../views/Main.vue import Login from ../views/Login.vueimport UserProfile from "../views/user/Profile.vue" import Us…...

系统敏感信息搜索工具(支持Windows、Linux)

目录 工具介绍 使用说明 search模块 browser模块 下载地址 工具介绍 可以快速搜索服务器中的有关username,passsword,账号,口令的敏感信息还有浏览器的账户密码。 使用说明 search模块 searchall64.exe search -p 指定路径 searchall64.exe search -p 指定路径 -s &q…...

Fyne ( go跨平台GUI )中文文档-容器和布局 (四)

本文档注意参考官网(developer.fyne.io/) 编写, 只保留基本用法 go代码展示为Go 1.16 及更高版本, ide为goland2021.2 这是一个系列文章&#xff1a; Fyne ( go跨平台GUI )中文文档-入门(一)-CSDN博客 Fyne ( go跨平台GUI )中文文档-Fyne总览(二)-CSDN博客 Fyne ( go跨平台GUI…...

文心智能体 恐怖类游戏

智能体名称&#xff1a;孤岛惊魂 链接&#xff1a;文心智能体平台AgentBuilder | 想象即现实 (baidu.com)https://agents.baidu.com/center/agent/preview/MFhBvA0K9EXXVdjHCcUumadWmWesKvw2 角色与目标设定 &#x1f9d1;&#x1f3fb; 角色&#xff1a;孤岛惊魂是一位虚拟…...

智慧城市运营模式--政府和社会资本合作

1、主要特征 政府和社会资本合作模式是政府与社会资本长期合作提供公共产品和服务的一种创新模式,主要集中在纯公共领域和准公共领域,通过建立“利益共享、风险共担”的长期合作伙伴关系,在增加公共产品和服务供给数量和提升质量的同时,达到减少财政资金支出、降低企业投资…...

【Python报错已解决】ValueError: cannot convert float NaN to integer

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…...

ClickHouse 与 Quickwit 集成实现高效查询

1. 概述 在当今大数据分析领域&#xff0c;ClickHouse 作为一款高性能的列式数据库&#xff0c;以其出色的查询速度和对大规模数据的处理能力&#xff0c;广泛应用于在线分析处理 (OLAP) 场景。ClickHouse 的列式存储和并行计算能力使得它在处理结构化数据查询时极具优势&…...

Facebook Marketplace无法使用的原因及解决方案

Facebook Marketplace是一项广受欢迎的买卖平台&#xff0c;然而&#xff0c;有时候用户可能会遇到无法访问或使用该功能的问题。通常&#xff0c;这些问题可以归结为以下几类原因&#xff1a; 地理位置限制&#xff1a; Facebook Marketplace并非在全球每个地区都可用。在某些…...

uboot — uboot命令的使用

uboot的命令繁多&#xff0c;下文只对工作中常用到的命令进行记录&#xff0c;其余命令待用到时再查查资料也不迟 一、环境变量操作命令 1、printenv 打印环境变量 2、setenv 修改环境变量/新建环境变量 3、saveenv 保存环境变量/删除环境变量&#xff08;给环境变量赋空值…...

基础漏洞——SSRF

目录 一.原理 二.引起ssrf的函数 三.这些函数具体作用 &#xff08;1&#xff09;File_get_content() &#xff08;2&#xff09;Fsockopen() &#xff08;3&#xff09;Curl_exec() 四.常见的业务场景&#xff08;可能出现的漏洞的地方&#xff0c;漏洞挖掘&#xff09…...

报错解决方案

大模型-报错解决方案 百度千帆大模型 仅个人笔记使用&#xff0c;感谢点赞关注 百度千帆大模型 未开通付费模型 qianfan.errors.APIError: api return error, req_id: code: 17, msg: Open api daily request limit reached 可能的原因: 未开通所调用服务的付费权限&#xff0…...

机器人的动力学——牛顿欧拉,拉格朗日,凯恩

机器人的动力学推导方法有很多&#xff0c;常用得有牛顿&#xff0c;拉格朗日&#xff0c;凯恩等方法&#xff0c;接下来&#xff0c;简单说说他们之间的使用。注&#xff1a;这里不考虑怎么来的&#xff0c;只说怎么应用。 参考1&#xff1a;4-14动力学分析方法-牛顿—欧拉方…...

【AI写作】解释区块链技术的应用场景和优势

【AI写作】解释区块链技术的应用场景和优势 浅浅的玩一下这个 AI 写作&#xff0c;本内容全为 AI 生成&#xff0c;仅为 AI 观点&#xff0c;无作者本人的观点。 区块链技术是一种去中心化的分布式账本技术&#xff0c;具有以下应用场景和优势&#xff1a; 金融领域&#xff…...

IPsec-Vpn

网络括谱图 IPSec-VPN 配置思路 1 配置IP地址 FWA:IP地址的配置 [FW1000-A]interface GigabitEthernet 1/0/0 [FW1000-A-GigabitEthernet1/0/0]ip address 10.1.1.1 24 [FW1000-A]interface GigabitEthernet 1/0/2 [FW1000-A-GigabitEthernet1/0/2]ip address...

java jvm知识点

下面给你一份 Java JVM 知识点全景总结&#xff08;面试 实战级&#xff09;&#xff0c; 覆盖 内存结构 → 垃圾回收 → 类加载 → 调优 → 面试高频&#xff0c;适合 中高级 Java 面试。一、JVM 是什么&#xff1f;JVM&#xff08;Java Virtual Machine&#xff09;是 Java …...

基于AW9523与CircuitPython的互动LED灯带硬件开发实践

1. 项目概述&#xff1a;一个会“动”的LED灯带如果你玩过嵌入式开发&#xff0c;尤其是用Adafruit的板子做点小玩意儿&#xff0c;那你肯定对“快速原型”这个词不陌生。CircuitPython的出现&#xff0c;让写代码控制硬件变得像在电脑上写脚本一样简单。但有时候&#xff0c;板…...

PaperDebugger:解决机器学习代码复现危机的调试框架

1. 项目概述&#xff1a;当代码遇上论文&#xff0c;一场“可复现性”的硬仗如果你和我一样&#xff0c;常年混迹在机器学习、数据科学或者计算物理这类前沿领域&#xff0c;那你一定对下面这个场景不陌生&#xff1a;读到一篇顶会论文&#xff0c;作者声称他们的模型在某个基准…...

【2026最新】鸿蒙NEXT数据持久化实战:培训班管理系统数据存储全攻略

鸿蒙开发中数据总是丢失&#xff1f;本地存储和网络请求搞不定&#xff1f;本文用15分钟带你彻底搞懂Preferences、RDB、HTTP三大数据持久化方案&#xff0c;附完整培训班管理系统实战代码和踩坑记录&#xff0c;让你的鸿蒙App数据存储从此安全可靠&#xff01;一、学员信息本地…...

UE5 3D Widget 渲染优化:告别动态模糊与重影困扰

1. 3D Widget动态模糊问题的根源剖析 第一次在UE5项目中使用3D Widget展示动态角色动画时&#xff0c;我被那些飘忽不定的睫毛重影彻底搞懵了。明明在静态预览时一切正常&#xff0c;但只要角色开始眨眼或做表情&#xff0c;睫毛和发丝边缘就会出现诡异的拖影效果&#xff0c;就…...

从网卡硬件到Linux内核:深入理解RSS多队列如何避免你的数据包‘堵车’

从网卡硬件到Linux内核&#xff1a;深入理解RSS多队列如何避免你的数据包‘堵车’ 想象一下早高峰时段的城市主干道&#xff1a;如果只有一条车道&#xff0c;所有车辆不得不排队缓行&#xff0c;而增加车道数量后车流立刻变得顺畅。网络数据包的处理同样遵循这一逻辑——当单队…...

Windows11下DOSBox从零到精通的完整配置与实战指南

1. 为什么要在Windows11上使用DOSBox&#xff1f; 很多年轻朋友可能都没见过DOS系统长什么样。作为上世纪80年代到90年代的主流操作系统&#xff0c;DOS虽然界面简陋&#xff0c;但它孕育了无数经典软件和游戏。直到今天&#xff0c;学习汇编语言、运行老式工业控制程序、怀旧经…...

血管分割新突破:详解DSCNet中的蛇形卷积如何解决管状结构难题

血管分割新突破&#xff1a;详解DSCNet中的蛇形卷积如何解决管状结构难题 在医学影像分析领域&#xff0c;血管分割一直是个令人头疼的问题。想象一下&#xff0c;当你面对一张OCTA&#xff08;光学相干断层扫描血管成像&#xff09;图像时&#xff0c;那些细如发丝、蜿蜒曲折…...

Hash-Buster未来展望:AI驱动的智能哈希破解技术

Hash-Buster未来展望&#xff1a;AI驱动的智能哈希破解技术 【免费下载链接】Hash-Buster Crack hashes in seconds. 项目地址: https://gitcode.com/gh_mirrors/ha/Hash-Buster Hash-Buster作为一款高效的哈希破解工具&#xff0c;目前已支持MD5、SHA1、SHA256等多种哈…...

使用Taotoken为Hermes Agent配置自定义模型提供方详细步骤

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用Taotoken为Hermes Agent配置自定义模型提供方详细步骤 对于使用Hermes Agent框架构建智能体应用的开发者而言&#xff0c;灵活…...