文章目录
- 前言
- 一、查找接口及参数信息
- 1.1 找访问路径
- 1.2 参数及返回结果信息
- 1.3 编写功能模块函数
- 二、代码设计思路
- 三、总结
前言
对于正在学习Java后端开发的同学来说,对于Java后端功能模块的开发过程及思路要有一个整体清晰的流程。才能保证在开发过程中更加的顺畅。本文章只是以简单的登录模块开发为例,讲解在前端已经写好的前提下,我们怎样去写功能模块的代码。以及如何去编写以及编写的思路展开说明。使得在今后的模块开发中更加的顺畅。
一、查找接口及参数信息
这里正规开发的时候是有专门的接口文档的,但如果是对于自己练习项目的同学来说是没有接口文档的。我们就要学会在没有给接口文档的前提下也能通过代码找到对应的接口以及返回的参数。
接口文档如下图所示:
给出接口文档我们就不用去关注前端代码是如何编写的,只需要对照着文档写mapper、service、controller层代码即可,但对于大部分不是公司代码,只是自己学习的项目来说就没有这种接口文档。我们就需要去了解前端的代码,从前端的代码中找到对应的访问路径、请求的参数、还有返回的结果。
下面我们通过登录模块为例来做一下。
1.1 找访问路径
首先启动项目,打开前端的登录页面。
点击f12检查,点击登录按钮,找到网络—>全部—>请求网址。
如下图所示:我们可以看到请求的网址就是我们要编写的Mapping(“/”)里面要编写的内容。
1.2 参数及返回结果信息
请求的参数就是用户名和密码,但返回的结果我们需要看下如下图所示的内容:
可看到有code状态码、data数据、map、msg提示语。这些都是通过服务端返回的结果类里提前写好的类。代码如下所示:
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
/**
* 通用返回结果的封装类
* @param <T>
*/
@Data
public class R<T> {
private Integer code; //编码:1成功,0和其它数字为失败
private String msg; //错误信息
private T data; //数据
private Map map = new HashMap(); //动态数据
public static <T> R<T> success(T object) {
R<T> r = new R<T>();
r.data = object;
r.code = 1;
return r;
}
public static <T> R<T> error(String msg) {
R r = new R();
r.msg = msg;
r.code = 0;
return r;
}
public R<T> add(String key, Object value) {
this.map.put(key, value);
return this;
}
}
从代码中可看到,在我们编写功能模块时,return R.方法就可以了,是一种通用的返回数据类。
1.3 编写功能模块函数
- 通过上述的分析,我们可写出模块的基本结构,返回结果是R<泛型就是我们返回的员工信息>,第一个参数是request 到时候获取session时用到,如果登录成功就会将用户信息存到session,第二个参数是employee 前台传的json数据封装成员工对象,json转化需要用到下面代码中的@RequestBody注解
@PostMapping("/login")
public R<Employee> login(HttpServletRequest request, @RequestBody Employee employee){
//逻辑处理
return R.success(emp);
}
二、代码设计思路
当写好上述的内容后,就要开始编写函数内部的逻辑和实现的思路部分,在编写前我们都需要先列出来判断登录成功或者失败的逻辑是怎样的。步骤分为以下6个步骤。
//1.将页面提交的密码password进行md5加密处理
//2.根据页面提交的用户名username查询数据库
//3、如果没有查询到则返回登录失败结果
//4.密码比对,如果不一致则返回登录失败结果
//5.查看员工状态,如果为已禁用状态,则返回员工已禁用
//6.登录成功,将员工id存入Session并返回登录成功结果
然后我们根据思路编写代码:
@PostMapping("/login")
public R<Employee> login(HttpServletRequest request, @RequestBody Employee employee){
//1.将页面提交的密码password进行md5加密处理
String password=employee.getPassword();
password = DigestUtils.md5DigestAsHex(password.getBytes());
//2.根据页面提交的用户名username查询数据库
LambdaQueryWrapper<Employee> queryWrapper=new LambdaQueryWrapper<>();
queryWrapper.eq(Employee::getUsername,employee.getUsername());
Employee emp = employeeService.getOne(queryWrapper);
//3、如果没有查询到则返回登录失败结果
if(emp == null){
return R.error("用户名不存在");
}
//4.密码比对,如果不一致则返回登录失败结果
if(!emp.getPassword().equals(password)){
return R.error("密码错误");
}
//5.查看员工状态,如果为已禁用状态,则返回员工已禁用
if(emp.getStatus() == 0){
return R.error("账号已禁用");
}
//6.登录成功,将员工id存入Session并返回登录成功结果
request.getSession().setAttribute("employee",emp.getId());
return R.success(emp);
}
这样就将登录功能模块的设计完成了。
三、总结
总结下来开发模块的流程及分为三部分,
一是找接口文档对应的内容,看返回值,传入的参数、请求的路径。
二是设计思路编写,将设计的思路写成注释,代表着每一步将要编写的代码。
三是开始编写每一步的代码。
本次的内容适合于学习完SpringBoot、MP,在做项目的同学去查看了解。对于后端的同学来说,前端的代码不要求会写,但是必须要理解代码的含义,这样找这些代码的跳转,模块的联系将更加的顺畅,有利用开发。
当然了,有接口文档的话开发起来就会更加容易,如果是在学习阶段,建议后端的同学还是要将前端的知识点也学学。