
需求:输入两个整数,点击" 点击相加 "按钮,显示计算结果
接口又被称为api,两种叫法指的都是同一种东西。是指应用程序对外提供的服务的描述。就是允许客户端给服务器发送哪些http请求,并且每种请求获取什么样的http响应。将接口约定的内容写在文档上,就是" 接口文档 “,接口文档也可以理解为是应用程序的” 操作说明书 "。
请求路径 | calc/sum |
|---|---|
请求方式 | GET/POST |
接口描述 | 计算两个整数相加 |
参数名 | 类型 | 是否必须 | 备注 |
|---|---|---|---|
num1 | Integer | 是 | 参与计算的第一个数 |
num2 | Integer | 是 | 参与计算的第二个数 |
Content-Type | text/html |
|---|---|
响应内容 | 计算机计算结果:sum |
@RestController
@RequestMapping("/calc")
public class CalcController {
@RequestMapping("/sum")
public String sum(@RequestParam Integer num1,@RequestParam Integer num2){
Integer sum = num1 + num2;
return "计算机计算结果: " + sum;
}
}@RequestParam 使用该注解确保参数不为空。
接口测试:

测试工具发现服务端接口没有问题,使用页面测试:

需求:用户输入账号和密码,后端进行校验密码是否正确
请求路径 | user/login |
|---|---|
请求方式 | POST |
接口描述 | 校验账号密码是否正确 |
参数名 | 类型 | 是否必须 | 备注 |
|---|---|---|---|
userName | String | 是 | 校验的账号 |
password | String | 是 | 校验的密码 |
true //账号密码验证成功false //账号密码验证失败(2)查询登录用户接口
请求路径 | user/getLoginUser |
|---|---|
请求方式 | GET |
接口描述 | 查询当前登录的用户 |
@RestController
@RequestMapping("/user")
public class UserController {
@RequestMapping("/login")
public Boolean login(String userName, String password, HttpSession session){
//参数校验:账号密码是否为空
if(!StringUtils.hasLength(userName) || !StringUtils.hasLength(password)){
return false;
}
//判断账号和密码是否正确
//TODO name=admin,password=admin时正确
if("admin".equals(userName) && "admin".equals(password)){
session.setAttribute("userName",userName);
return true;
}
return false;
}
}账号和密码现在为直接写死的状态。 StringUtilshasLength() 是Spring提供的一个工具方法,判断字符串是否有值 字符串为null或者" "时,返回false,其他返回true。
@RestController
@RequestMapping("/user")
public class UserController {
@RequestMapping("/getUserLogin")
public String getUserLogin(HttpSession session){
String userName = (String) session.getAttribute("userName");
return userName==null?"未登录":userName;
}
}测试工具验证后端接口:

发现登录成功且发送get请求获取当前用户正确。使用前端页面验证。

多次刷新页面发现登录人依旧是admin,但重启服务器登陆人为空,session 存储在内存中,若不做任何处理,默认服务器重启时,数据丢失。

请求路径 | messagewall/getList |
|---|---|
请求方式 | GET |
接口描述 | 获取后端留言信息 |
响应:JSON形式

请求路径 | messagewall/publish |
|---|---|
请求方式 | POST |
接口描述 | 提交留言信息给后端 |
发送请求正文也为JSON格式,和上述一样。
后端将message封装为对象为参数接收前端的JSON数据,并且要使用注解 @RequestBody 。封装为对象就需要有属性的get和set方法,手动添加比较麻烦,此时引入一个依赖就非常轻松。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>@Data
public class MessageInfo {
private String from;
private String to;
private String message;
}使用 @Data 注解可以自动包含getter/setter/toString等等方法。 还提供了一些细颗粒度的注解:
注解 | 作用 |
|---|---|
@Getter | 自动添加 getter 方法 |
@Setter | 自动添加 setter 方法 |
@ToString | 自动添加 toString 方法 |
@EqualsAndHashCode | 自动添加 equals 和 hashCode 方法 |
@NoArgsConstructor | 自动添加无参构造方法 |
@AllArgsConstructor | 自动添加全属性构造方法,顺序按照属性的定义顺序 |
@NonNull | 属性不能为 null |
@RequiredArgsConstructor | 自动添加必需属性的构造方法,final + @NonNull 的属性为必需 |
而 @Data 为上述所有注解的总和,也就是添加@Data方法,上述所有方法都全部包含。
MessageInfo 对象类
@Data // 自动生成get/set方法等
//@Getter
//@Setter
public class MessageInfo {
private String from;
private String to;
private String message;
}接口类:
@RestController
@RequestMapping("/message")
public class MessageController {
private List<MessageInfo> messageInfoList = new ArrayList<>();
@RequestMapping("/publish")
public Boolean publish(@RequestBody MessageInfo messageInfo,HttpSession Session){
if(!StringUtils.hasLength(messageInfo.getFrom())
|| !StringUtils.hasLength(messageInfo.getTo())
|| !StringUtils.hasLength(messageInfo.getMessage())){
return false;
}
messageInfoList.add(messageInfo);
return true;
}
@RequestMapping("/getList")
public List<MessageInfo> getList(){
return messageInfoList;
}
}测试工具测试接口:

此时验证接口全部正确,使用前端页面验证:

此时不断刷新页面数据也不会丢失,但数据是在内存中,一旦服务器重启,数据就丢失了。
本文围绕加法计算器、用户登录、留言板三个典型场景,从前后端交互接口约定、服务端代码实现到运行测试展开了完整讲解,其中留言板模块还补充了 Lombok 依赖引入与注解使用的实操细节。这些案例覆盖了后端开发中接口设计、代码编写、工具优化等核心环节,既体现了基础开发流程的规范性,也展示了 Lombok 这类工具对开发效率的提升作用。
这篇博文发布恰逢 2025 年岁末,祝愿各位在新的一年里技术深耕不辍,开发之路步履不停,将所学所练转化为实际成果,在编程领域收获更多成长与突破!