Spring Boot JSON 数据处理:@RequestBody 与 @ResponseBody 详解

追风的人
追风的人
发布时间:2026-10-15| 8人浏览过
原创

Spring Boot 默认集成 Jackson 库,无需额外依赖即可自动处理 JSON 数据的序列化与反序列化。掌握 @RequestBody 和 @ResponseBody 的使用,是实现前后端数据交互的关键。本文将通过完整代码示例,讲解如何接收前端 POST 请求中的 JSON 数据并返回结构化响应。

核心原理与目标

在 Web 应用中,前端通常以 JSON 格式发送异步请求。Spring Boot 的处理机制如下:

  • 接收数据(反序列化):当 Controller 方法参数标注 @RequestBody 时,框架会将请求体中的 JSON 字符串映射到对应的 Java 对象中。
  • 返回数据(序列化):当 Controller 方法或类标注 @ResponseBody 时,返回值会自动转换为 JSON 字符串写入 HTTP 响应体,而非视图名称。

第1步:定义数据传输对象 (DTO)

创建一个 POJO 类用于承载数据。确保提供 Getter 和 Setter 方法,因为 Jackson 反射调用这些方法完成属性绑定。注意属性命名需与前端提交的 JSON Key 保持一致(或通过 @JsonProperty 指定)。

package com.ch.ch5_2.model;

public class Preson {
    private String pname;
    private String password;
    private Integer page; // 实际业务中通常不叫page,这里沿用原意代表年龄或页码

    public String getPname() { return pname; }
    public void setPname(String pname) { this.pname = pname; }
    
    public String getPassword() { return password; }
    public void setPassword(String password) { this.password = password; }
    
    public Integer getPage() { return page; }
    public void setPage(Integer page) { this.page = page; }
}

第2步:编写前端测试页面

使用 Thymeleaf 模板引擎构建界面,引入 jQuery 发起 AJAX POST 请求。关键配置包括设置 contentType: "application/json" 以及使用 JSON.stringify() 序列化表单数据。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>JSON Test</title>
<!-- 引入 Bootstrap 样式 -->
<link rel="stylesheet" th:href="@{css/bootstrap.min.css}" />
<link rel="stylesheet" th:href="@{css/bootstrap-theme.min.css}" />
<!-- 引入 jQuery -->
<script type="text/javascript" th:src="@{js/jquery.min.js}"></script>
<script type="text/javascript">
    function testJson() {
        var uname = $("#pname").val();
        var pwd = $("#password").val();
        var age = $("#page").val();
        
        $.ajax({
            url: "testJson",
            type: "post",
            contentType: "application/json", // 重要:指定内容类型为 JSON
            dataType: "json", // 预期服务器返回 JSON
            data: JSON.stringify({pname:uname, password:pwd, page:age}),
            success: function(data){
                if(data != null && data.length > 0) {
                    // 解析返回的 List

第3步:创建控制器逻辑

Controller 中需要区分页面渲染入口和数据接口入口。数据接口需使用 @ResponseBody 或组合注解 @RestController。以下示例展示了如何接收单个对象并返回复杂的集合结构(List of Maps),以此验证泛型处理情况。

package com.test.ch3_2.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
public class TestJsonController {

    /**
     * 返回视图页面
     */
    @RequestMapping("/input")
    public String input() {
        return "input";
    }

    /**
     * 处理 JSON 请求并返回 JSON 响应
     * 使用 @ResponseBody 告知 Spring 直接返回对象内容
     */
    @RequestMapping("/testJson")
    @ResponseBody
    public List<Map<String, Object>> testJson(@RequestBody Preson user) {
        // 1. 验证接收到的数据
        System.out.println("Received -> pname: " + user.getPname() +
                ", password: " + user.getPassword() + 
                ", value: " + user.getPage());

        // 2. 构造返回数据 (模拟数据库操作)
        List<Map<String, Object>> result = new ArrayList<>();
        Map<String, Object> map = new HashMap<>();
        map.put("pname", "TestUser");
        map.put("password", "secret");
        map.put("page", 99);
        result.add(map);
        
        // 注意:原代码中 allp 未定义,此处修正为局部变量
        return result;
    }
}

启动应用后,访问 http://localhost:8080/input 打开测试页面,填写信息点击按钮,观察控制台输出及前端 Console 返回值。

通过以上步骤,我们实现了从前端 JS 提交 JSON 字符串,经过后端反序列化为 Java 对象,处理后再序列化为复杂 JSON 结构的完整闭环。

以上就是 Spring Boot JSON 数据处理方法的详细内容,更多关于 Spring Boot @RequestBody 与 @ResponseBody 的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。