游乐游手机版
首页/编程语言/文章详情

SpringBoot中Web三大核心交互案例解析与实现

时间:2026-08-16 15:55
基于SpringBoot的Web三大核心交互案例,涵盖表单提交、AJAX登录与Session状态管理及JSON数据交互。通过计算求和、用户登录、留言板三个典型场景,演示后端参数绑定、@RequestBody注解用法及前后端联调技巧,详细讲解SpringBootWeb开发中的核心交互原理与实现方法。

对于 Spring Boot 入门者来说,掌握后端接口开发与前端页面交互方式,是学会 Web 开发和前后端联调的关键一步。本文将结合三个经典 Web 实战案例——表单提交、AJAX 登录与 Session 状态管理、以及 JSON 数据交互——帮助您系统理解 Spring Boot 常见接口写法、前后端联调流程以及核心注解的实际应用。

1. 案例一:表单提交与参数绑定(计算求和)

先来看一种最基础、也最典型的 Web 交互方式:HTML 表单提交。虽然这种方式相对传统,但它正是理解 Spring Boot 后端参数绑定机制和表单请求处理流程的起点。

1.1 后端代码:CalcController.ja va

通过 @RestController 可以快速编写接口,并直接使用方法参数接收表单提交的数据。Spring Boot 会自动完成请求参数绑定与类型转换,无需开发者手动解析参数。

package cn.overthinker.springboot;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/calc")
@RestController
public class CalcController {
    /**
     * 求和接口:通过方法参数名自动接收前端表单提交的 num1 和 num2
     */
    @RequestMapping("/sum")
    public String sum(Integer num1, Integer num2) {
        // 使用 Integer 包装类进行非空判断,避免空指针异常
        if(num1 == null || num2 == null) {
            return "请求非法:请输入两个数字!";
        }
        // 计算并返回结果
        return "计算结果为:" + (num1 + num2);
    }
}

1.2 前端代码:calc.html

基于SpringBoot的Web三大核心交互案例

基于SpringBoot的Web三大核心交互案例

HTML 代码




    
    
    简单求和计算器
    


    

简单求和计算器

数字1: 数字2:

1.3 联调重点解析:参数绑定

  • 前端 Form 的 name 属性:前端 中的 name 必须与后端方法参数名 Integer num1 完全一致,这是 Spring Boot 表单参数绑定能否成功的核心细节。一旦名称拼写错误或不一致,后端接收到的值就会是 null。
  • 后端自动类型转换:Spring Boot 会自动把 HTTP 请求中的字符串参数转换成 Ja va 方法所需的 Integer 类型。如果用户输入的是非数字内容,通常会触发类型转换异常,因此在真实项目中,建议增加参数校验,或者结合 @RequestParam 设置默认值和必填规则。

2. 案例二:AJAX 异步交互与 Session 状态管理(用户登录)

这个案例进一步引入了 AJAX 异步请求,实现无刷新登录,同时通过 Session 在服务器端保存用户登录状态。这也是 Spring Boot 用户登录功能中非常常见的一种实现方案。

2.1 后端代码:UserController.ja va 和 Person.ja va

UserController.ja va(核心逻辑)

package cn.overthinker.springboot;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/user")
@RestController
public class UserController {
    /**
     * 登录接口:使用 HttpSession 存储用户信息
     */
    @PostMapping("/login")
    public boolean login(String userName, String password, HttpSession session) {
        if(!StringUtils.hasLength(userName) || !StringUtils.hasLength(password)) {
            return false;
        }
        // 硬编码校验(实际项目应查询数据库)
        if("admin".equals(userName) && "123456".equals(password)) {
            // **核心知识点:登录成功后,将用户名存入 Session**
            session.setAttribute("loginUser", userName);
            return true;
        }
        return false;
    }
    /**
     * 获取当前登录用户接口:从 Session 中读取用户信息
     */
    @GetMapping("/getLoginUser")
    public String getLoginUser(HttpServletRequest request) {
        // request.getSession(false):如果 Session 不存在,则不创建
        HttpSession session = request.getSession(false);
        if(session != null) {
            String loginUser = (String) session.getAttribute("loginUser");
            return loginUser;
        }
        return "";
    }
}

Person.ja va(实体类)

虽然这个类没有直接参与登录接口处理,但它可以作为 Ja vaBean 参数绑定的示例。借助 @Data 注解,系统会自动生成 Getter/Setter 等常用方法,从而减少样板代码,提高开发效率。

package cn.overthinker.springboot;
// 略:包含 name, password, age 属性及其 Getter/Setter 和 toString 方法
public class Person {
    // ... 属性、Getter/Setter、toString ...
}

2.2 前端代码:login.html 和 index.html

基于SpringBoot的Web三大核心交互案例

基于SpringBoot的Web三大核心交互案例

这里通过 jQuery AJAX 发起异步登录请求。与传统表单提交相比,AJAX 登录不会刷新页面,能够即时提示登录结果,并在成功后跳转页面,整体用户体验更好。

login.html(登录页面)




  
  用户登录
  


  

用户登录

用户名: 密码:

index.html(首页 - 获取登录信息)




    
    用户登录首页
    


    

欢迎回来,登录人:

2.3 联调重点解析:AJAX 与 Session

  • AJAX:AJAX 允许前端在不刷新页面的前提下与后端接口进行异步数据交互。在 login.html 中,通过 jQuery 的 $.ajax 发送登录请求,成功后直接跳转首页,失败时即时弹出提示,适合实现现代 Web 登录功能。
  • Session 机制:Session 是服务器端保存用户状态的常用方案。当用户登录成功后,session.setAttribute("loginUser", userName); 会把当前登录用户名写入 Session。随后浏览器会通过 Cookie 自动携带 Session ID 再次访问服务器。当 index.html 请求 /user/getLoginUser 时,服务器就能根据这个 Session ID 找到对应 Session,并读取其中保存的 loginUser 信息,从而实现登录状态保持。这里的 getSession(false) 也非常重要,它表示如果 Session 不存在则不主动创建,适合避免用户未登录时产生不必要的 Session 对象。

3. 案例三:JSON 数据传输与 RESTful 接口(留言板)

这个案例展示的是现代 Web 开发中最常见的前后端通信方式:前端与后端通过 JSON 格式传输数据,后端则提供 RESTful 风格接口。这种模式在 Spring Boot 项目、前后端分离系统以及企业级应用中都非常普遍。

3.1 后端代码:MessageController.ja va 和 MesseageInfo.ja va

MessageController.ja va(核心逻辑)

package cn.overthinker.springboot;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import ja va.util.ArrayList;
import ja va.util.List;
@RequestMapping("/Message")
@RestController
public class MessageController {
    // 存储留言的列表(模拟数据库存储)
    private List messeageInfoList = new ArrayList<>();
    /**
     * 发布留言接口:使用 @RequestBody 接收 JSON 数据
     */
    @PostMapping("/publish")
    public Boolean publish(@RequestBody MesseageInfo messeageInfo) {
        // 参数校验
        if(!StringUtils.hasLength(messeageInfo.getFrom())
             || !StringUtils.hasLength(messeageInfo.getTo())
             || !StringUtils.hasLength(messeageInfo.getMessage())) {
            return false;
        }
        messeageInfoList.add(messeageInfo);
        return true;
    }
    /**
     * 获取留言列表接口:返回 JSON 数组
     */
    @GetMapping("/getList")
    public List getList() {
        return messeageInfoList;
    }
}

MesseageInfo.ja va(数据传输对象 DTO)

这里使用 Lombok 的 @Data 注解自动生成 Getter/Setter 等常用方法,可以显著减少重复代码,是 Spring Boot 开发中常见的 DTO 写法。

package cn.overthinker.springboot;
import lombok.Data;
@Data // Lombok 注解,自动生成 Getter/Setter, toString, equals等方法
public class MesseageInfo {
    private String from;
    private String to;
    private String message; // 注意:前端传的字段名是 message
}

3.2 前端代码:message.html

基于SpringBoot的Web三大核心交互案例

前端通过 AJAX 提交 JSON 格式数据到 Spring Boot 接口中。这里有一个关键点:contentType 必须设置为 application/json,否则后端无法按照 JSON 请求体正确解析数据。

HTML 代码




    
    留言板
    


    

留言板

输入后点击提交,信息将显示在下方

谁:

对谁:

说什么:

3.3 联调重点解析:@RequestBody 与 JSON

  • @RequestBody:这是 Spring Boot 接收 JSON 请求体时最关键的注解之一。它会告诉 Spring MVC:把 HTTP 请求体(Request Body)中的 JSON 字符串读取出来,并自动映射为方法参数中的 MesseageInfo messeageInfo 对象。如果请求体为空,或者 JSON 格式不合法,通常会直接报错。
  • 前端 contentType: "application/json":这个请求头必须显式设置,用来通知服务器当前提交的数据格式是 JSON。如果没有配置,Spring 默认可能按 application/x-www-form-urlencoded 方式处理,从而导致 @RequestBody 无法正确接收数据。
  • 前端 JSON.stringify(...):这是 Ja vaScript 原生方法,用于把 JS 对象转换成 JSON 字符串,例如把 {from: 'A', to: 'B', message: 'Hello'} 序列化后发送给后端。Spring Boot 收到后再通过 @RequestBody 自动完成反序列化。
  • JSON 字段匹配:前端 JSON 的键名必须与后端 DTO(MesseageInfo)中的属性名完全一致,例如 message 对应 private String message;。字段名如果写错、大小写不一致,都会导致数据绑定失败或字段值为空。

4. 总结:前后端联调模式对比

联调模式案例核心机制后端注解/参数接收优点缺点
Form 表单提交求和计算器浏览器直接跳转/刷新页面方法参数名匹配实现简单、无需 Ja vaScript,适合入门理解参数绑定用户体验较弱、页面会刷新、交互控制不够灵活
AJAX (Query String)登录系统 (GET/POST)异步通信(无刷新)方法参数名匹配交互体验更好、支持局部更新、适合登录等场景更适合传输少量简单参数,不利于复杂结构数据处理
AJAX (JSON)留言板异步通信(无刷新)@RequestBody 接收 DTO适合复杂数据传输,是前后端分离项目中最常用的方式需要正确配置 Content-Type,并配合 JSON.stringify 使用
来源:https://www.jb51.net/program/363775yue.htm
上一篇ThinkPHP动态表单验证规则实现与条件验证技巧 下一篇Python OpenCV开发常见错误原因分析与解决方案
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Yum怎么查找已安装软件包及安装信息
编程语言 · 2026-08-17

Yum怎么查找已安装软件包及安装信息

使用yumlistinstalled列出所有已安装软件包,配合grep可快速过滤特定软件;yuminfo查看元数据和安装状态;yumsearch通过关键词搜索包名。以上命令均需sudo权限执行。

Debian系统中Python与Java互操作方法详解
编程语言 · 2026-08-17

Debian系统中Python与Java互操作方法详解

在Debian系统中,Python与Java互操作有五种方案:Jython直接调用Java类库但仅支持Python2;GraalVM实现多语言高性能协作;JNI底层灵活但复杂度高;Web服务通过RESTfulAPI解耦;消息队列支持异步解耦。各方案适用场景不同,需根据需求选择。

@FunctionalInterface校验逻辑与函数式接口强制约束规范
编程语言 · 2026-08-17

@FunctionalInterface校验逻辑与函数式接口强制约束规范

@FunctionalInterface 这个注解在 Java 开发中很常见,很多人都用过,但真正彻底理解它作用的人,其实并不算多。归根结底,它本质上是一种编译期契约声明,同时也是编译器进行强制校验的一道安全锁。它不会在运行时改变接口行为,也不会给接口增加任何额外能力。但不要因此低估它——在提升代码

Ubuntu上如何测试JavaScript性能与运行效率
编程语言 · 2026-08-17

Ubuntu上如何测试JavaScript性能与运行效率

Ubuntu上JavaScript性能测试实用指南 一 测试类型与指标 在Ubuntu环境中进行JavaScript性能测试,首先要明确测试目标。从实际项目经验来看,JS性能测试通常可以分为三大类,不同类型关注的性能指标也不一样: 前端页面与渲染性能:核心指标包括FPS(帧率)、长任务、布局与重绘,

LNMP环境容量规划怎么做更合理
编程语言 · 2026-08-17

LNMP环境容量规划怎么做更合理

LNMP环境容量规划需评估CPU、内存、磁盘I O等现状,明确响应时间等关键指标,基于历史流量预测负载,倒推服务器资源,设计水平或垂直扩展方案,通过压测验证,并持续监控调整,定期备份恢复,记录决策并同步团队。