尚硅谷-云尚办公-项目复盘

news2024/11/23 13:29:25

尚硅谷-云尚办公-项目复盘

  • 资料地址
  • 本文介绍
  • 问题汇总
    • 问题1.knife4j无法下载 视频4
    • 问题2.dev等含义 视频5
    • 问题3.wrapper继承/实现图 视频8
    • 问题4.修改统一返回结果 视频11
    • 问题5.修改后新增也变修改 视频29
    • 问题6.redis中key值乱码 视频55-60
    • 问题7.RangeError: Maximum call stack size exceeded 视频80

资料地址

bilibili视频讲解地址:https://www.bilibili.com/video/BV1oM41177Jd
knife4j官网:https://doc.xiaominfo.com/

本文介绍

本文是作者在练习尚硅谷的云尚办公项目时,遇到的一些问题,问题自上而下顺序记录,当然,也包含一些理论知识的复习与巩固,以及作者对该项目的一些其他的见解。

问题汇总

问题1.knife4j无法下载 视频4

提示Dependency ‘com.github.xiaoymin:knife4j-spring-boot-starter:3.0.3’ not found

问题解释 :翻译为中文是这个knife4j3.0.3未被找到,且无法找到knife4j的任何版本,再结合本人用的maven镜像为阿里云,猜测原因可能是1.maven3.6.3版本过老,无法拉取较新的依赖;2,阿里云未收录knife4j。
解决方案:打开project structure,点击libraries,点击加号,选择from maven,把你需要查找的依赖输入进去,回车进行搜索,选择搜索出来的正确结果,点击ok进行安装,安装完后就ok了。
在这里插入图片描述

问题如图
在这里插入图片描述

问题2.dev等含义 视频5

开发过程中常会遇到dev、pro等缩写,在此对这些缩写进行统一阐述

  1. 开发环境(development):开发环境通常是指开发人员进行软件开发的场所,包括开发工具、开发框架、测试数据库、调试工具等。在开发环境中,开发人员可以进行代码编写、调试、运行和测试,以便及时发现和修复软件中出现的问题。

  2. 测试环境(test):主要用于测试软件或系统的稳定性,性能和功能等是否符合要求。

  3. 预生产环境(pre-production)或者称为用户验收环境(UAT):是在软件发布到线上之前的最后一个阶段,主要用于让用户验收系统是否符合其需求,测试系统是否可以正常工作。

  4. 生产环境(production):也称为线上环境,是软件最终运行的环境,主要用于处理真实的业务请求,有着极高的稳定性和安全性需求。

常用dev开发环境和pro生产环境。

问题3.wrapper继承/实现图 视频8

在这里插入图片描述

问题4.修改统一返回结果 视频11

感觉尚硅谷提供的统一返回结果封装类不是很好,就自己重新写了个,依旧调用的尚硅谷提供的ResultCodeEnum枚举类,将原本的泛型改为object便于操作。

将构造方法全部封装为private类型,防止他人调用时采用new的方式写入code,code已在枚举类中进行了定义,我希望的是需要code时直接从枚举中获取,而不是通过写入的方式。

封装了四个返回结果为ok的方法,分别表示无参、仅数据、仅消息、数据和消息,不传递code的原因是可以直接调用ResultCodeEnum枚举类中的code,且成功的code只能是200,既然封装到了枚举中,就没必要每次传递。

另外两个失败方法同理,但失败方法中不会传递数据回去,顶多修改返回消息,在返回消息中写失败原因。

因为我没有采用@data注解,所以自动生成的set/get方法,这里还意外发现了如果只有set方法,会报错No converter found for return value of type。这是因为SpringMVC在处理Controller返回结果时,需要将结果转换成JSON格式,如果返回结果的对象没有Get/Set方法,就无法进行转换。

package com.ys.oa.result;


public class Result {

    private Integer code;
    private String message;
    private Object data;

    //构造方法 全为private
    private Result(){}

    private Result(Integer code,String message,Object data){
        this.code = code;
        this.message = message;
        this.data = data;
    }

    private Result(ResultCodeEnum resultCodeEnum,Object data){
        this.code = resultCodeEnum.getCode();
        this.message = resultCodeEnum.getMessage();
        this.data = data;
    }

    //成功
    public static Result ok(){
        return new Result(ResultCodeEnum.SUCCESS,null);
    }

    public static Result ok(String message){
        return new Result(ResultCodeEnum.SUCCESS.getCode(),message,null);
    }

    public static Result ok(Object data){
        return new Result(ResultCodeEnum.SUCCESS,data);
    }

    public static Result ok(String message,Object data){
        return new Result(ResultCodeEnum.SUCCESS.getCode(),message,data);
    }
    //失败
    public static Result fail(){
        return new Result(ResultCodeEnum.FAIL,null);
    }

    public static Result fail(String message){
        return new Result(ResultCodeEnum.FAIL.getCode(),message,null);
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}


问题5.修改后新增也变修改 视频29

问题描述:对某一数据进行修改后,点击新增,输入数据,点击确定,会发现执行的依旧是修改操作。
产生原因:在修改时为表单绑定了一个id,修改结束后id依旧存在,此情况下执行新增操作时,因为存在id,会被认为是修改操作。
解决方案:点击添加按钮时,将this.sysRole置为空,我的方法名可能和你的不一样,记得修改。

        //添加按钮
        addBtn(){
            this.sysRole = {}
            this.titleName = "添加"
            this.dialogVisible = true
        },

问题6.redis中key值乱码 视频55-60

问题描述:按照视频讲解存入key应为admin,这儿的username是我自己加的,但实际存入的key前面多了一串乱码\xac\xed\x00\x05t\x00\x0e

在这里插入图片描述

问题分析:spring-data-redis 的 RedisTemplate<K, V>模板类 在操作redis时默认使用JdkSerializationRedisSerializer 来进行序列化。spring操作redis是在jedis客户端基础上进行的,而jedis客户端与redis交互的时候协议中定义是用byte类型交互,看到spring-data-redis中RedisTemplate<K, V>在操作的时候k,v是泛型对象,而不是byte[]类型的,这样导致的一个问题就是,如果不对RedisTemplate进行设置,spring会默认采用defaultSerializer = new JdkSerializationRedisSerializer();这个方法来对key、value进行序列化操作,JdkSerializationRedisSerializer它使用的编码是ISO-8859-1

问题解决方案:将所有的RedisTemplate redisTemplate改为RedisTemplate<String,String> redisTemplate

如图:
在这里插入图片描述
另外:jedis在springboot2.x中已经被弃用了,springboot2.x默认使用的是lettuce,因此在yaml中配置的jedis并不会生效,可以先不写

![在这里插入图片描述](https://img-blog.csdnimg.cn/875a8bbe7ec7481ebbe6c5248e9874dc.png在这里插入图片描述

问题7.RangeError: Maximum call stack size exceeded 视频80

【注:我出现此错误应该与我写的返回路由列表有关,当时我是根据自己的想法实现的,没有照着老师的写】
报错信息截图:
在这里插入图片描述
问题分析:先放代码,未改前的代码如下,我的原因是因为找不到该路由,this.$router.push(‘/processSet/templateSet’)是指跳转到路由下的/processSet/templateSet,但是!!!在我返回的路由中,根本就没有/processSet/templateSet,然后开始分析数据库找原因
在这里插入图片描述
来到数据库可以看见,审批模块设置不仅有个爸爸还有个爷爷,因此它理论上应该是一个三层路由,正确的路由地址为/processSet/processTemplate/templateSet,然后我查了下后台返还给前端的路由地址,也确实是/processSet/processTemplate/templateSet,but,我将前端的路由改成了/processSet/processTemplate/templateSet后,虽然不报错了,但跳转的界面还是原界面,继续分析错误…
在这里插入图片描述
我直接把模块审批设置的爸爸改为审批模块,将此模块修改为二级模块,路由就变成了/processSet/templateSet,于是开始测试,顺利通过~
在这里插入图片描述
到这儿问题已经解决了,但原因我继续挖掘了一下,可能是因为页面二级路由的和三级的路由共用router-view 了,利用router-view 和 redirect 重新定义一下(每个人的情况不一样,可以参考解决),原文:https://blog.csdn.net/Passerby_K/article/details/114890393

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

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

相关文章

高完整性系统工程(六):INTRODUCING ADA

目录 1. ADA的历史 2. ADA的特点 2.1 Strong, Static Typing 强语言、强静态类型语言 2.1.1 ADA is Strong, Static Typing 2.1.2 C is Weak, Static Typing 2.2 Module System 2.3 Portable 2.3.1 ADA 2.3.2 C 2.3.3 Cost of Runtime Checking 2.4 Readability …

IPython使用学习笔记

学习《利用python进行数据分析》第三章 IPython:一种交互式计算和开发环境的笔记&#xff0c;共享给大家&#xff0c;同时为自己作为备忘用。 安装ipython用pip即可。ps.博主用的是win7系统&#xff0c;所以接下来的都是在windows系统下操作的。 一.Ipython基础 启动&#xff…

chatgpt赋能python:Python关闭程序代码的实现方法

Python 关闭程序代码的实现方法 如果你是一个经验丰富的 Python 工程师&#xff0c;你应该知道如何在程序中实现正常关闭。不过&#xff0c;如果你是一个新手&#xff0c;这可能会变得有点棘手&#xff0c;特别是当你需要在程序中添加一些特定的关闭功能的时候。本文将为您介绍…

【javaEE】计算机网络原理初始

目录 1、网络发展史 1.1、独立模式 1.2、网络互连 1.2.1、局域网&#xff08;LAN&#xff09; 1.2.2、广域网&#xff08;WAN&#xff09; 1.2.3、广域网和局域网的区别 1.2.4、局域网组建网络的方式 &#xff08;了解&#xff09; &#xff12;、网络通信基础 2.1、I…

前端开发技术栈(工具篇):2023最新版nvm的Win/Linux安装和使用(详细) 27.8k stars

目录 nvm是什么 nvm下载 nvm安装 Windows nvm的使用 安装Node.js 切换Node.js版本 卸载Node.js 其他使用方法 Linux nvm的使用 安装NVM 使用NVM 总结 Node.js是一个非常流行的JavaScript运行时环境&#xff0c;可以帮助开发人员构建高性能的网络应用程序, 它被用于…

SpringCloud:分布式锁和线程安全

这篇文章是一个初步了解分布式应用的线程安全和锁的文章&#xff0c;所有截图及代码全部来自亲身实践 1.对于单机应用我们可以把锁加在方法维度&#xff08;有用&#xff0c;不推荐&#xff09; 像这样 但是我们应该缩小锁的范围&#xff0c;我们这里是在派单&#xff0c;避免…

手撕希尔排序

什么是希尔排序&#xff1f;他的效率怎摸样&#xff0c;如何去实现希尔排序呢&#xff1f;在这之前可能我们已经了解了希尔排序&#xff0c;作为排序中的老大哥一员&#xff0c;希尔排序的效率也是屈指可数的。 想要知道希尔排序如何实现我们就的先了解插入排序。 目录 1.何…

Flutter 笔记 | Flutter 核心原理(六)Embedder 启动流程(Android)

Embedder是Flutter接入原生平台的关键&#xff0c;其位于整个Flutter架构的底层&#xff0c;负责Engine的创建、管理与销毁&#xff0c;同时也为Engine提供绘制UI的接口&#xff0c;那么底层的实现细节如何&#xff1f;本文将详细分析。 Embedder关键类分析 在正式分析Embedd…

chatgpt赋能python:Python知识|关联两个列表

Python 知识 | 关联两个列表 Python 是一种高效的编程语言&#xff0c;它能够很好地进行数据处理&#xff0c;因此在 SEO 领域得到广泛的应用。关联两个列表是一种基础的数据处理方法&#xff0c;本文将为读者详细介绍如何使用 Python 关联两个列表&#xff0c;并给出一些实例…

Rust每日一练(Leetday0018) N皇后II、最大子数组和、螺旋矩阵

目录 52. N皇后 II N Queens II &#x1f31f;&#x1f31f;&#x1f31f; 53. 最大子数组和 Maximum Subarray &#x1f31f;&#x1f31f; 54. 螺旋矩阵 Spiral Matrix &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏…

chatgpt赋能python:Python关键词匹配:优化你的SEO策略

Python关键词匹配&#xff1a;优化你的SEO策略 在当今数字时代&#xff0c;搜索引擎是许多人获取信息和发现新客户的主要渠道。对于企业或个人网站来说&#xff0c;优化SEO&#xff08;搜索引擎优化&#xff09;策略变得至关重要。在SEO的世界里&#xff0c;关键词匹配是一个重…

springboot+vue编程训练考试测试系统设计与实现

本编程训练系统管理员功能有管理员和用户。管理员功能有个人中心&#xff0c;用户管理&#xff0c;题库资源管理&#xff0c;用户交流&#xff0c;试卷管理&#xff0c;留言板管理&#xff0c;试题管理&#xff0c;系统管理&#xff0c;考试管理。用户可以查看题库资源&#xf…

chatgpt赋能python:使用Python进行人民币兑换-带着您深入了解

使用Python进行人民币兑换 - 带着您深入了解 在当今日益全球化的世界里&#xff0c;进行货币兑换已成为很正常的事情。人民币是世界上最常用的货币之一&#xff0c;而Python作为一种强大的编程语言&#xff0c;可以帮助我们进行人民币兑换计算。本文将介绍如何使用Python进行人…

使用CCProxy搭建windows系统阿里云socket代理服务器 教程

目录 1. 通过windows远程连接阿里云服务器2. 云服务器上安装CCProxy2.1 CCProxy下载安装2.2 设置协议、代理服务、端口号和ip2.3 新建代理用户2.4 确保你的CCProxy启动了服务 3. 在阿里云实例安全组中开放代理端口3.1 前往安全组页面3.2 添加你对应服务的开放端口 总结 欢迎关注…

Java键盘事件处理及监听机制解析

文章目录 概念KeyEventKeyListener代码演示总结 概念 Java事件处理采用了委派事件模型。在这个模型中&#xff0c;当事件发生时&#xff0c;产生事件的对象将事件信息传递给事件的监听者进行处理。在Java中&#xff0c;事件源是产生事件的对象&#xff0c;比如窗口、按钮等&am…

java企业级信息系统开发学习笔记11 利用MyBatis实现条件查询

文章目录 一、学习目标1.对学生表进行条件查询&#xff0c;涉及姓名、性别和年龄三个字段。2.比如查询姓“吴”&#xff0c;性别为“女”&#xff0c;同时年龄为19的学生记录 二、打开上一笔记mybatis项目三、对学生表实现条件查询&#xff08;一&#xff09;创建学生映射器配置…

如何使用wget下载(录制)流媒体或直播推流文件,以及下载出现“正在把输出重定向至 “wget-log.1””错误该怎么办

下载推流文件其实非常简单&#xff0c;就是通常使用的最简单的命令&#xff1a; wget URL -O 输出文件名这里最好设置一下输出文件名&#xff0c;不然很可能下载的文件名称会很奇怪&#xff0c;导致格式识别错误或者其他问题。 不过&#xff0c;如果你直接使用这个命令很可能…

微信小程序nodejs+vue图书馆自习室座位管理系统vax51

系统设计需要从用户和管理员的实际需求开始&#xff0c;以了解他们需要实施哪些功能以及他们可以包括哪些管理工作。 考虑到图书馆座位预约系统小程序系统设计的特点&#xff0c;应满足几个要求&#xff1a;开发语言 node.js 框架&#xff1a;Express 前端:Vue.js 数据库&#…

[MySQL从入门到精通]MySQL概述及安装

前言 你是否想过我们在登录各种各样的网站时候&#xff0c;所需要输入的账号密码&#xff0c;它们存储在哪里&#xff1f;你猜对了&#xff0c;就是今天我们所要说的数据库 目录 前言 1.数据库的概述 1.1 数据 1.2 数据库 1.3数据库的种类 1.4数据库管理系统 2.MySQL的…

CSS 水平垂直居中的方式

目录 在不知道子元素宽高的情况下&#xff0c;水平垂直居中的六种方式&#xff1a; 1、弹性盒子布局方式来实现&#xff08;flex&#xff09;。 2、绝对定位 transform 3、table标签 4、display&#xff1a;table-cell 5、display: grid 6、writing-mode 属性 在不知道子…