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

news2024/11/25 9:04:43

文章目录

    • 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 {

    //员工id
    private 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
     */
    @Override
    public void editPassword(PasswordEditDTO passwordEditDTO) {
        String oldPassword = passwordEditDTO.getOldPassword();
        String newPassword = passwordEditDTO.getNewPassword();


        //获取员工id
        Long 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.coloradmin.cn/o/1832892.html

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

相关文章

海南聚广众达电子商务咨询有限公司引领行业变革

在数字化浪潮席卷全球的今天&#xff0c;电商行业正以前所未有的速度发展。海南聚广众达电子商务咨询有限公司&#xff0c;凭借其在抖音电商领域的深厚积累和不断创新&#xff0c;正逐步成为行业的佼佼者。这家以专注、专业、专注为核心理念的公司&#xff0c;不仅为客户提供全…

GenICam标准(二)

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

前端锚点 点击 滑动双向绑定

一. 页面样式 二. 代码 <div class"flexBox"><div class"mdDiv" v-for"(item,index) in tabList" :key"index" :class"nowChooseindex?choosed:" click"jumpMD(index, item.id)">{{item.name}}&l…

找工作小项目:day16-重构核心库、使用智能指针(2)

day16-重构核心库、使用智能指针 太多了分一篇写。 5、EventLoop 这是一个事件轮询&#xff0c;在这个部分会通过Poller进行就绪事件的获取&#xff0c;并将事件进行处理。 头文件 这里使用了一个智能指针并使用的是unique_ptr指向Poller红黑树&#xff0c;防止所有权不止…

应变玻璃合金是航天产业重要弹性材料 研究开发意义重大

应变玻璃合金是航天产业重要弹性材料 研究开发意义重大 应变玻璃&#xff0c;是一种形状记忆合金&#xff0c;为纳米级材料&#xff0c;其短程有序晶格应变区域呈冻结状态&#xff0c;具有典型的玻璃化转变特征&#xff0c;可以对外界刺激产生应变反应&#xff0c;也称为应变玻…

【Kaggle量化比赛】Top讨论

问: 惊人的单模型得分,请问您使用了多少个特征来获得如此高的得分?我也在使用LGB模型。 答 235个特征(180个基本特征+滚动特征) 问: 您是在使用Polars进行特征工程还是仅依赖于Pandas+Numba/多进程?即使进行了Numba优化,我也发现当滚动特征过多时,推理速度会非常慢。在…

云服务器ECS是什么?云服务器ECS有什么方便之处

什么是云服务器ECS&#xff1f; 云服务器 ECS 本质上是一种基于云计算技术的虚拟服务器。与传统服务器不同&#xff0c;它打破了传统物理服务器的局限性&#xff0c;为我们提供了一种全新的计算资源使用方式。 我们不再需要购买和维护昂贵的硬件设备&#xff0c;而是可以根据…

C++新特性复习1 版本11

参照来自于&#xff1a; cppreference.com 老实说&#xff0c;我是毕业不久就开始用C&#xff0c;原因就是VC&#xff0c;当时用来做界面。还好吧&#xff0c;不是觉得太难&#xff0c;起码对数学底子没有要求&#xff0c;后面偶尔也用用&#xff0c;但是整体还是C居多。现在项…

msvcr120.dll是干嘛的,找不到msvcr120.dll无法执行如何解决方法

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcr120.dll丢失”。那么&#xff0c;msvcr120.dll到底是什么&#xff1f;它为什么会丢失&#xff1f;丢失后会对电脑产生什么影响&#xff1f;如何解决这个问题&#xff1f;本文将为您详…

纷享销客PaaS平台基础能力:一文说清 “业务定制能力”

01、业务对象定制能力 一个优秀的PaaS(平台即服务)平台的业务对象定制能力应该具备以下特点&#xff1a; 敏捷的业务模型&#xff1a; 能够根据用户的业务需求&#xff0c;提供可定制的数据模型和数据处理能力&#xff0c;支持各种数据类型和数据操作。 可视化的界面定制能力…

长短期记忆神经网络(LSTM)的回归预测(免费完整源代码)【MATLAB】

LSTM&#xff08;Long Short-Term Memory&#xff0c;长短期记忆网络&#xff09;是一种特殊类型的递归神经网络&#xff08;RNN&#xff09;&#xff0c;专门用于处理和预测基于时间序列的数据。与传统RNN相比&#xff0c;LSTM在处理长期依赖问题时具有显著优势。 LSTM的基本…

聊聊DoIP吧(三)-端口号port

DoIP在UDP和TCP建立连接和发送诊断报文的过程中使用的端口定义如下&#xff1a;

springboot宠物领养系统-计算机毕业设计源码07863

摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存…

Linux C语言:字符串处理函数

一、字符串函数 1、C库中实现了很多字符串处理函数 #include <string.h> ① 求字符串长度的函数strlen② 字符串拷贝函数strcpy③ 字符串连接函数strcat④ 字符串比较函数strcmp 2、字符串长度函数strlen 格式&#xff1a;strlen(字符数组)功能&#xff1a;计算字符串…

LLM中表格处理与多模态表格理解

文档处理中不可避免的遇到表格&#xff0c;关于表格的处理问题&#xff0c;整理如下&#xff0c;供各位参考。 问题描述 RAG中&#xff0c;对上传文档完成版式处理后进行切片&#xff0c;切片前如果识别文档元素是表格&#xff0c;那么则需要对表格进行处理。一般而言&#x…

【UML用户指南】-17-对基本行为建模-交互

目录 1、消息的可视化表示 2、对象与角色 3、链和连接件 4、消息 5、序列 6、创建、修改和撤销 7、表示法 8、常用建模技术 8.1、对控制流建模 8.1.1、基于时间的控制流 8.1.2、基于结构的控制流 在任何有意义的系统中&#xff0c;对象都不是孤立存在的&#xff0c;…

SQL优化选对执行计划,查询速度提升1000倍 | OceanBase 应用实践

作者&#xff1a;爱可生数据库高级工程师任仲禹&#xff0c;擅长故障分析和性能优化。 本文通过一个案例&#xff0c;分享使用OceanBase时&#xff0c;SQL走错执行计划&#xff0c;而导致慢SQL的排查方法论。 案例背景 在使用OceanBase 3.2.3 版本的过程中&#xff0c;项目组反…

Spring的SmartLifecycle可以没用过,但没听过就不好了! - 第517篇

历史文章&#xff08;文章累计500&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 《…

HTML基础结构入门

HTML&#xff08;超文本标记语言&#xff09;是构建网页的基础语言。它用于描述网页的结构和内容。让我们从最基本的HTML文档开始。 HTML基础结构 一个基本的HTML文档结构如下&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta …

PMP证书有何用?

PMP证书有何用&#xff1f; PMP项目管理专业人士资格认证证书对从事或希望从事项目管理工作的人员有重要意义&#xff0c;具体体现在以下几个方面&#xff1a; 1. 提供职业机会&#xff1a; PMP是项目管理领域的国际认可标准&#xff0c;拥有该证书的人在求职时具备了更强的…