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

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

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 相关产品和应用

全部下载

专题列表