本文开发一用户注册与登录的后端java平台。开发完后的网页效果:http://user-front.66bond.com/

后端主要提供用户的注册、查询、删除等操作。使用到的开发工具:

  • IDEA2021; 关注公众号”青椒工具”,发送”IDEA”,获取windows下的IDEA安装包
  • mysql 5.7;关注公众号”青椒工具”,发送”mysql”,获取windows下的mysql5.7安装包;

前面我们实现了注册和登录的业务逻辑,我们本章实现controller层,编写对接前端的网络访问的接口。

1、整体逻辑

前端访问一般会带上url,比如127.0.0.1/user/login等;

那我们的后端就要对接”/user/login”这个访问请求,将/user/login这个访问路径对应到java的某个方法;

而这个方法再去调用我们之前的userRegister或者userLogin等执行实际业务的代码。

2、代码框架:

在/com.tfzhang.backend/controller/中新建UserController.java文件,代码结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@RestController
@RequestMapping("/user")
public class UserController {

@Resource
private UserService userService;

/**
* 用户注册
*/
@PostMapping("/register")
public Long userRegister() {
//调用service接口;
}

/**
* 用户登录
*/
@PostMapping("/login")
public User userLogin() {
//调用service接口;
}

此处头部的路径”/user”,然后每个方法前的路径名为”/register”和”/login”,与前端访问的路径/user/register和/user/login分别对应。

3、接口代码实现:

我们先从userRegister入手开始编写代码,要解决的两个问题:

  • 如何接收前端的参数;
  • 代码中如何调用service接口;

根据spring web特性,当客户端发送一个POST或PUT请求,并且请求体中包含JSON或XML数据时,我们需要使用@RequestBody注解来接收这些数据。在这种情况下,通常还需要将请求体绑定到一个Java对象上,因此也需要进行封装。

所以为了接收数据,我们在/com.tfzhang.backend/model下创建request包,然后在其中创建UserRegisterRequest类:

1
2
3
4
5
6
7
8
9
10
11
12
package com.tfzhang.backend.model.request;
import lombok.Data;
import java.io.Serializable;

@Data
public class UserRegisterRequest implements Serializable {
private static final long serialVersionUID = 3190829218873263336L;

private String userAccount;
private String userPassword;
private String checkPassword;
}

有几个点需要说明下:

  • @Data标签,用于自动生成get、set等方法,免去代码的手动编写;
  • 实现Serilizable接口用于序列化,实现Serializable接口意味着这个类的对象可以被序列化,通常用于网络传输或保存到文件中,上述的serialVersionUID可以借助插件来生成,插件名称:GenerateSerialVersionUID;

完成上述的UserRegisterRequest后,我们再来书写userRegister的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@PostMapping("/register")
public Long userRegister(@RequestBody UserRegisterRequest userRegisterRequest){
if(userRegisterRequest==null){
return null;
}

String userAccount = userRegisterRequest.getUserAccount();
String userPassword = userRegisterRequest.getUserPassword();
String checkPassword = userRegisterRequest.getCheckPassword();

if(StringUtils.isAnyBlank(userAccount,userPassword,checkPassword)){
return null;
}
Long result = userService.userRegister(userAccount, userPassword, checkPassword);
return result;
}

为什么参数中要使用@RequestBody标签,我们前面已经提过;至于为什么是返回null,因为Long虽然是长整数,但它是对象型数据。

对于userLogin的代码也是同样,我们先在model/request/中创建UserLoginRequest类,然后再实现controller/UserController中的userLogin方法;

UserLoginRequest.java的代码:

1
2
3
4
5
6
7
8
9
10
11
package com.tfzhang.backend.model.request;
import lombok.Data;
import java.io.Serializable;

@Data
public class UserLoginRequest implements Serializable {
private static final long serialVersionUID = -8338104189763826441L;
private String userAccount;
private String userPassword;

}

userLogin的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@PostMapping("/login")
public User userLogin(@RequestBody UserLoginRequest userLoginRequest, HttpServletRequest request){
if(userLoginRequest==null){
return null;
}

String userAccount = userLoginRequest.getUserAccount();
String userPassword = userLoginRequest.getUserPassword();

if(StringUtils.isAnyBlank(userAccount,userPassword)){
return null;
}
User result = userService.userLogin(userAccount, userPassword,request);
return result;
}
4、代码测试

测试的步骤:

1、启动我们的BackendApplication,等待连接请求;

2、利用 IDEA自带的网络访问工具,创建访问,并发起访问;

我们先启动BackendApplication,如图1所示:

图5.2启动后端

图1 启动BackendApplication

然后利用IDEA自带网络测试工具,如图2所示:

图5.1http测试工具

图2 Http测试工具

我们先创建登录的测试访问,如图3所示,测试成功过,后端的确返回user数据:

图5.3发起请求获得结果

图3 测试userlogin接口

按照同样的方式,我们再来测试注册接口,注册成功返回大于0的正数,否则返回负数;

逻辑删除的测试

假设我们现在将”tfzhang2” 用户的逻辑删除位设置为1,那么再用tfzhang2登录应该失败,我们来尝试下。

至于如何将tfzhang2的isDelete设置为1,则参考图4:

图5.4测试逻辑删除

图4 修改isDelete的值

当isDelete设置为1时,再次登录,发现返回数据为空,说明逻辑删除的确发挥作用。

至此,对于login和register我们的controller开发完成,后续我们要完成用户管理接口:查找用户和删除用户。

5、参考资料:

本文参考自如下知识星球中的视频教程,更多的完整的相关视频教程,见如下的收费知识星球,近3万人的学习社区,

编程有人同行,学习不再迷茫

编程导航知识星球