该系列将记录一份完整的实战项目的完成过程,该篇属于第二天
案例来自B站黑马程序员Java项目实战《瑞吉外卖》,请结合课程资料阅读以下内容
该篇我们将完成以下内容:
我们的功能完善一般分为三步
但是我们页面的访问并没有设置限制,如果我们直接跳过登陆页面直接输入系统内部页面的url同样可以进入
此外,我们需要在进入页面之前进行判断,那么我们就需要构造一个过滤器或者拦截器,下面我们采用过滤器Filter实现
我们创建一个filter文件夹专门存放filter过滤器
下面我们根据逻辑进行代码实现过程:
我们在系统内部页面中点击新增员工,会跳转到另一个页面,这属于前端工作
接下来我们在页面中填写信息,前端会将这些信息封装起来,以Employee的形式发送给后端端口
我们打开F12,输入数据点击保存后查看数据的请求方式(点击负载,可以查看到填写信息的Employee内容,这里不再展示):
这个请求方式的路径就是我们需要完善的代码URL的路径
现在我们来到IDEA中进行简单的开发:
在介绍下一节之前,我们需要注意:
因此,如果我们连续两次输入ID相同的员工创建,就会报错导致程序出现异常
因此我们需要对异常进行处理,异常处理通常分为两种方法:
第一种方法只能作用在当前情况下,但这种情况并不仅仅在当前情况出现,例如我们修改id如果修改为相同id也会报错
第二种方法可以作用在全局状态下,只要遇见这种问题,我们都会进行处理
因此我们采用第二种方法处理:
我们要将数据库信息通过分页查询的方法查询出来并反馈到页面中
打开负载,查看传递的信息:
还需要注意的是,当我们输入查询信息后,我们会多一个参数name,这个参数也需要进行后台操作:
我们需要注意的是我们采用的是数据库的分页查询,因此我们需要设置一个分页插件来将数据插入
此外我们的代码书写只需要采用page,pageSize查询数据,将name进行近似匹配并当作查询条件即可
首先我们先来实现分页插件:
packagecom.qiuluo.reggie.config;importcom.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;importcom.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;/***配置MP的分页插件*注意:设置为配置类,使Spring可以搜索到*/@ConfigurationpublicclassMyBatisPlusConfig{//设置为Bean,受管理权限@BeanpublicMybatisPlusInterceptormybatisPlusInterceptor(){//1.创建一个大型InterceptorMybatisPlusInterceptormybatisPlusInterceptor=newMybatisPlusInterceptor();//2.添加PaginationInnerInterceptor进Interceptor里即可mybatisPlusInterceptor.addInnerInterceptor(newPaginationInnerInterceptor());//3.返回InterceptorreturnmybatisPlusInterceptor;}}接下来再来实现主页面的代码:
当点击我们的员工行列后的启动/禁止,数据库的Status进行转换
我们同样点击后打开F12查看请求URL以及参数:
我们可以看到它将id作为判断员工的标准,将status的值传入便于我们修改
其中前端将修改状态的操作和修改员工信息的操作列为同一个请求,所以我们直接完成修改员工全部信息的操作即可
我们直接书写后端代码:
如果按照上述操作进行,是无法成功修改状态的,但是程序也不会发生报错
这是因为我们的数据库ID中设置长度为19位,但是我们的JS处理器的Long类型只能精确到前16位
这就会导致我们的ID数据的最后三位在传递时变化为000,导致前端传递ID与数据库实际ID无法匹配,无法成功修改
我们采用的处理方法是将服务端传递的JSON数据进行处理,我们希望将Long类型的数据全部转变为String类型,这样就不会省略为0
具体步骤如下:
当我们点击页面员工的编辑后,跳转页面:
这里我们需要注意,我们的数据会直接出现在页面中,这说明我们在点击编辑时,后台会将我们的数据传递给前端,前端才能将数据展现出来
所以我们回到上一步,F12查看操作:
我们会发现,它调用了GET类型的请求,并将我们的id传入,这说明我们需要创建一个路径来根据id获得数据
然后我们点击编辑里的保存,查看F12:
我们会发现,这个路径和我们上一步实现的启动禁用账号的路径相同,所以当我们点击修改后自动调用根据id修改参数的方法
我们只需要实现第一个方法根据ID获得数据即可:
在这里我们会点出该项目目前容易出错的位置
Filter也称之为过滤器,它是Servlet技术中的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源
实现步骤主要分为两步:
所以需要设置一个MyBatisPlus拦截器来完成操作,MyBatisPlus已经为我们简化了步骤,我们只需要将相对应的拦截器添加即可:
packagecom.qiuluo.reggie.config;importcom.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;importcom.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;/***配置MP的分页插件*/@ConfigurationpublicclassMyBatisPlusConfig{@BeanpublicMybatisPlusInterceptormybatisPlusInterceptor(){MybatisPlusInterceptormybatisPlusInterceptor=newMybatisPlusInterceptor();mybatisPlusInterceptor.addInnerInterceptor(newPaginationInnerInterceptor());returnmybatisPlusInterceptor;}}然后我们就需要注意业务层继承的实现类中所给的方法的参数即可:
但默认的消息转换器有时不能满足我们的需求,例如上述异常处理中,我们希望直接将JSON数据转化为String类型的数据