Spring Boot JSON 数据处理:@RequestBody 与 @ResponseBody 详解
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 的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













