跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
Java大前端java

Spring Boot 结合 jQuery 实现前后端分离图书管理系统

基于 Spring Boot 和 jQuery 构建前后端分离的图书管理系统,涵盖接口定义、Mock 数据模拟及前后端联调策略。重点解析登录验证、图书列表展示的实现细节,并深入探讨 GET 与 POST 请求在实际开发中的参数传递差异与最佳实践,帮助开发者快速定位接口对接中的常见问题。

追风少年发布于 2026/3/24更新于 2026/5/64 浏览
Spring Boot 结合 jQuery 实现前后端分离图书管理系统

Spring Boot 结合 jQuery 实现前后端分离图书管理系统

1. 项目准备与接口约定

这是一个相对完整的案例,我们聚焦于核心功能的实现。首先明确前后端交互的接口规范。

1.1 用户登录

登录是系统的第一道关卡,需要验证账号密码并建立会话。

登录接口设计

后端提供一个 /user/login 接口,接收用户名和密码,验证成功后在 Session 中存储用户信息。

1.2 图书列表展示

登录后进入图书管理页面,主要功能是展示图书列表及状态。

字段说明
字段说明
id图书 ID
bookName图书名称
author作者
count数量
price定价
publish出版社
status图书状态 (1-可借阅,其他 - 不可借阅)
statusCN图书状态中文含义

2. 后端代码实现

2.1 数据模型定义

创建 BookInfo 类来映射数据库中的图书信息。这里使用了 Lombok 的 @Data 注解简化 Getter/Setter 生成。

import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;

@Data
public class BookInfo {
    private Integer id;           // 图书 ID
    private String bookName;      // 书名
    private String author;        // 作者
    private Integer count;        // 数量
    private BigDecimal price;     // 定价
    private String publish;       // 出版社
    private Integer status;       // 状态 0-不允许借阅 1-允许借阅
     String statusCN;      
     Date createTime;      
     Date updateTime;      
}
private
// 状态中文描述
private
// 创建时间
private
// 更新时间

2.2 用户控制层

UserController 负责处理登录请求。为了演示方便,这里使用硬编码的账号密码进行验证,实际项目中应对接数据库或加密服务。

import jakarta.servlet.http.HttpSession;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/user")
@RestController
public class UserController {

    @RequestMapping("login")
    public boolean login(String name, String password, HttpSession session) {
        if (!StringUtils.hasLength(name) || !StringUtils.hasLength(password)) {
            return false;
        }
        // 简单验证:admin / admin
        if ("admin".equals(name) && "admin".equals(password)) {
            session.setAttribute("userName", name);
            return true;
        }
        return false;
    }
}

2.3 图书控制层与 Mock 数据

BookController 提供获取图书列表的接口。在开发初期或测试阶段,直接连接数据库可能效率较低或环境不稳定,此时可以使用 Mock 数据模拟真实场景。

为什么使用 Mock? Mock 即模拟数据。当协同开发的同事未完成接口,或者测试环境数据难以构造时,创建一个虚拟对象或数据样本能辅助开发和测试工作。简单来说,就是用假数据跑通流程。

为了保持代码整洁,我们将 Mock 逻辑封装成一个独立方法,这样后续接入真实数据时只需替换该方法内容即可。

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

@RequestMapping("/book")
@RestController
public class BookController {

    @RequestMapping("/getList")
    public List<BookInfo> getList() {
        List<BookInfo> books = mockData();
        // 处理页面展示时的状态翻译
        for (BookInfo book : books) {
            if (book.getStatus() == 1) {
                book.setStatusCN("可借阅");
            } else {
                book.setStatusCN("不可借阅");
            }
        }
        return books;
    }

    /**
     * 数据 Mock 生成
     */
    private List<BookInfo> mockData() {
        List<BookInfo> books = new ArrayList<>();
        for (int i = 0; i < 15; i++) {
            BookInfo book = new BookInfo();
            book.setId(i);
            book.setBookName("图书" + i);
            book.setAuthor("作者" + i);
            book.setCount(new Random().nextInt(100));
            book.setPrice(new BigDecimal(new Random().nextInt(100)));
            book.setPublish("出版社" + i);
            book.setStatus(i % 5 == 0 ? 2 : 1);
            books.add(book);
        }
        return books;
    }
}

3. 前端页面联调

前端使用 jQuery 发起 Ajax 请求与后端交互。

3.1 登录逻辑

在登录页面添加处理函数,将表单数据发送至后端。

<script src="js/jquery.min.js"></script>
<script>
function login() {
    $.ajax({
        type: "post",
        url: "/user/login",
        data: {
            name: $("#userName").val(),
            password: $("#password").val()
        },
        success: function (result) {
            if (result) {
                location.href = "book_list.html";
            } else {
                alert("账号或密码不正确!");
            }
        }
    });
}
</script>

3.2 列表渲染

删除前端硬编码的 HTML,改为从后端动态获取数据并渲染到表格中。

function getBookList() {
    $.ajax({
        type: "get",
        url: "/book/getList",
        success: function (result) {
            console.log(result);
            if (result != null) {
                var finalHtml = "";
                for (var i = 0; i < result.length; i++) {
                    var book = result[i];
                    finalHtml += "<tr>";
                    finalHtml += "<td><input type='checkbox' name='selectBook' value='" + book.id + "'></td>";
                    finalHtml += "<td>" + book.id + "</td>";
                    finalHtml += "<td>" + book.bookName + "</td>";
                    finalHtml += "<td>" + book.author + "</td>";
                    finalHtml += "<td>" + book.count + "</td>";
                    finalHtml += "<td>" + book.price + "</td>";
                    finalHtml += "<td>" + book.publish + "</td>";
                    finalHtml += "<td><div>" + book.statusCN + "</div></td>";
                    finalHtml += "<td><a href='book_update.html?bookId=" + book.id + "'>修改</a>";
                    finalHtml += "<a href='javascript:void(0)' onclick='deleteBook(" + book.id + ")'> 删除</a></td>";
                    finalHtml += "</tr>";
                }
                $("tbody").html(finalHtml);
            }
        }
    });
}

4. 调试思路与常见问题

当页面效果不符合预期时,不要盲目修改代码,建议按以下顺序排查:

  1. 检查后端日志:确认请求是否到达服务器。可以在 Controller 入口打印参数,确认接收到的值是否正确。
  2. 使用 Postman 测试:绕过前端直接调用接口,验证后端返回的数据格式和内容是否符合预期。
  3. 检查前端网络请求:查看浏览器开发者工具(Network 面板),确认请求 URL、参数及响应状态码。

5. GET 与 POST 的实际区别

在实际开发中,GET 和 POST 的区别主要体现在参数位置和数据格式约定上,而非简单的'能不能传参'。

5.1 参数位置

  • GET:参数只能放在 URL 中(Query String)。Postman 中对应 Params 标签页。
  • POST:参数既可以放在 URL,也可以放在 Body 中。实际开发中最常用的是 Body。

5.2 数据格式一致性

  • GET:因为参数在 URL,后端只需解析 URL 参数,不存在格式问题,前后端不会因为格式不一致而出错。
  • POST:如果使用 Body 传参,就必须保证前后端格式一致。例如前端发送 JSON,后端必须配置为解析 JSON;前端发送 form-data,后端也要对应接收。否则会出现'前端传了但后端收不到'的经典问题。

5.3 最佳实践总结

  • 语义区别:GET 用于获取资源,幂等且可缓存;POST 用于提交资源,非幂等。
  • 安全性与大小:GET 受 URL 长度限制,不适合传大量数据,且参数暴露在 URL 中,不适合敏感信息。POST 无明确大小限制,且参数在 Body 中,相对更安全(需配合 HTTPS)。
  • 工具约束:Postman 默认隐藏 GET 请求的 Body 输入框,是为了引导开发者遵循行业最佳实践。虽然理论上某些客户端支持 GET Body,但这属于非常规操作,兼容性差且易导致缓存失效,不建议在生产环境中使用。

通过理解这些差异,我们可以更准确地设计接口,减少前后端对接时的摩擦成本。

目录

  1. Spring Boot 结合 jQuery 实现前后端分离图书管理系统
  2. 1. 项目准备与接口约定
  3. 1.1 用户登录
  4. 登录接口设计
  5. 1.2 图书列表展示
  6. 字段说明
  7. 2. 后端代码实现
  8. 2.1 数据模型定义
  9. 2.2 用户控制层
  10. 2.3 图书控制层与 Mock 数据
  11. 3. 前端页面联调
  12. 3.1 登录逻辑
  13. 3.2 列表渲染
  14. 4. 调试思路与常见问题
  15. 5. GET 与 POST 的实际区别
  16. 5.1 参数位置
  17. 5.2 数据格式一致性
  18. 5.3 最佳实践总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • GPT-5.5 超高智商模型1元抵1刀ChatGPT中转购买
  • 代充Chatgpt Plus/pro 帐号了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Python 零基础入门教程:基础语法与核心概念详解
  • 基于 MCP 协议的 JS 逆向自动化工具构建与实践
  • C++ 开发中 <string> 与 <string.h> 的区别
  • 建筑设计 AI 绘画提示词:从入门到精通的创作指南
  • Obsidian AI Agent 配置指南:Claudian 与 Obsidian Skills
  • OpenClaw 实战:构建多功能 AI 数字替身与场景应用
  • 数据结构复习:带头双向循环链表实现详解
  • 2025 主流 AI IDE 对比:Trae、Copilot、Windsurf、Cursor 选型指南
  • 开源逆袭!Wan2.1让家用电脑也能跑AI视频生成
  • IntelliJ IDEA 构建时 OutOfMemoryError 错误排查与内存优化
  • 基于 YOLO 的航拍船舶目标检测数据集与训练教程
  • DeepSeek-R1 技术解读:强化学习与推理能力的激发机制
  • WebGIS 实战:WKT 转 GeoJSON 方案及 Leaflet 集成指南
  • FastAPI 打造基于 LLM 的 Web 接口实战教程
  • UI UX Pro Max:AI 驱动的现代前端 UI 工作流实战
  • Windows 平台本地 RAG 服务构建:Dify + Ollama + Qwen2.5 部署实践
  • 交通流量预测实战:用 GCN 构建城市路网预测模型(PeMS 数据集+PyTorch Geometric)
  • Windows 7 系统下 Git 安装与配置
  • 基于 AI 生成 Windows 18-HD19 风格 CSS 组件库实战
  • Trae CN 国内首个 AI 原生 IDE 功能评测与上手指南

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online