JSON 处理与内嵌 Tomcat 部署:Spring Boot 如何实现前后端数据交互与一键启动?

目录

一、前言

[二、什么是 JSON](#二、什么是 JSON)

[三、为什么不用 XML?](#三、为什么不用 XML?)

[四、Spring Boot 如何接收 JSON](#四、Spring Boot 如何接收 JSON)

[五、@RequestBody 做了什么?](#五、@RequestBody 做了什么?)

[六、什么是 Jackson?](#六、什么是 Jackson?)

[七、JSON 转 Java 对象](#七、JSON 转 Java 对象)

[八、Spring Boot 返回 JSON 原理](#八、Spring Boot 返回 JSON 原理)

[九、常见 JSON 注解](#九、常见 JSON 注解)

@JsonFormat

@JsonIgnore

@JsonProperty

[十、什么是 Tomcat?](#十、什么是 Tomcat?)

[十一、传统 Tomcat 部署方式](#十一、传统 Tomcat 部署方式)

[十二、Spring Boot 为什么内嵌 Tomcat](#十二、Spring Boot 为什么内嵌 Tomcat)

[十三、内嵌 Tomcat 架构](#十三、内嵌 Tomcat 架构)

[十四、Tomcat 依赖在哪里?](#十四、Tomcat 依赖在哪里?)

[十五、Spring Boot 启动时发生了什么](#十五、Spring Boot 启动时发生了什么)

[十六、修改 Tomcat 端口](#十六、修改 Tomcat 端口)

十七、打包部署

[十八、Jar 与 War 对比](#十八、Jar 与 War 对比)

十九、生产环境部署流程

二十、总结


一、前言

在现代 Java Web 开发中,我们几乎每天都在和两样东西打交道:

复制代码
JSON

Tomcat

例如:

前端发送请求:

复制代码
{
  "username":"admin",
  "password":"123456"
}

Spring Boot 自动接收:

java 复制代码
@PostMapping("/login")
public String login(
        @RequestBody UserDTO dto){

    return "success";
}

返回结果:

复制代码
{
  "code":200,
  "msg":"登录成功"
}

整个过程中:

复制代码
JSON负责数据传输

Tomcat负责网络通信

而 Spring Boot 最大的创新之一就是:

复制代码
内嵌Tomcat

让开发者无需单独安装 Web 容器即可启动项目。

本文将系统讲解:

  • 什么是 JSON

  • Spring Boot 如何处理 JSON

  • Jackson 工作原理

  • Tomcat 的作用

  • Spring Boot 内嵌 Tomcat 原理

  • Jar 包部署流程


二、什么是 JSON

JSON:

复制代码
JavaScript Object Notation

即:

复制代码
JavaScript对象表示法

是一种轻量级数据交换格式。

示例:

复制代码
{
  "id":1,
  "name":"Tom",
  "age":20
}

特点:

复制代码
可读性高

跨语言

体积小

解析速度快

因此成为:

复制代码
前后端通信标准

三、为什么不用 XML?

早期系统广泛使用:

XML 复制代码
<user>
    <id>1</id>
    <name>Tom</name>
</user>

但 XML 存在:

复制代码
标签冗余

数据量大

解析复杂

而 JSON:

复制代码
{
  "id":1,
  "name":"Tom"
}

更加简洁。

因此:

复制代码
JSON逐渐取代XML

成为主流。


四、Spring Boot 如何接收 JSON

前端请求:

复制代码
POST /user

Content-Type: application/json

请求体:

复制代码
{
  "name":"张三",
  "age":18
}

对应实体类:

java 复制代码
@Data
public class UserDTO {

    private String name;

    private Integer age;
}

Controller:

java 复制代码
@RestController
@RequestMapping("/user")
public class UserController {

    @PostMapping
    public String save(
            @RequestBody UserDTO dto){

        return dto.getName();
    }
}

执行过程:

复制代码
JSON

↓

Jackson

↓

UserDTO

↓

Controller

五、@RequestBody 做了什么?

很多人以为:

复制代码
@RequestBody

只是一个注解。

实际上它背后完成了:

复制代码
读取请求流

解析JSON

对象转换

参数绑定

工作。

流程:


六、什么是 Jackson?

Spring Boot 默认使用:

复制代码
Jackson

完成 JSON 转换。

依赖:

XML 复制代码
<dependency>
    <groupId>
        com.fasterxml.jackson.core
    </groupId>

    <artifactId>
        jackson-databind
    </artifactId>
</dependency>

对象转 JSON:

java 复制代码
ObjectMapper mapper =
        new ObjectMapper();

User user = new User();

user.setName("Tom");

String json =
        mapper.writeValueAsString(user);

System.out.println(json);

输出:

复制代码
{
  "name":"Tom"
}

七、JSON 转 Java 对象

JSON:

复制代码
{
  "name":"Tom",
  "age":20
}

转换:

java 复制代码
String json =
        "{\"name\":\"Tom\",\"age\":20}";

User user =
        mapper.readValue(
                json,
                User.class
        );

结果:

复制代码
user.getName();

输出:

复制代码
Tom

八、Spring Boot 返回 JSON 原理

Controller:

java 复制代码
@GetMapping("/{id}")
public User query(){

    return new User(
            1L,
            "Tom"
    );
}

Spring MVC:

复制代码
User对象

↓

Jackson

↓

JSON字符串

↓

HTTP响应

最终浏览器收到:

复制代码
{
  "id":1,
  "name":"Tom"
}

九、常见 JSON 注解

@JsonFormat

时间格式化:

java 复制代码
@JsonFormat(
        pattern =
        "yyyy-MM-dd HH:mm:ss"
)
private LocalDateTime createTime;

输出:

复制代码
{
  "createTime":
  "2026-06-02 10:30:00"
}

@JsonIgnore

忽略字段:

java 复制代码
@JsonIgnore
private String password;

返回:

复制代码
{
  "username":"admin"
}

不会暴露密码。


@JsonProperty

重命名字段:

java 复制代码
@JsonProperty("user_name")
private String username;

输出:

复制代码
{
  "user_name":"admin"
}

十、什么是 Tomcat?

Tomcat 本质上是:

复制代码
Servlet容器

也是:

复制代码
Web服务器

作用:

复制代码
监听端口

接收HTTP请求

调用Servlet

返回响应

架构:


十一、传统 Tomcat 部署方式

以前开发:

复制代码
开发代码

↓

打WAR包

↓

上传Tomcat

↓

启动Tomcat

流程:


缺点:

复制代码
部署复杂

环境依赖

版本不一致

十二、Spring Boot 为什么内嵌 Tomcat

Spring Boot 目标:

复制代码
开箱即用

因此:

复制代码
Tomcat直接集成到项目

开发者无需安装。

只需要:

复制代码
java -jar app.jar

即可启动。


十三、内嵌 Tomcat 架构

Spring Boot:

Tomcat 已经成为:

复制代码
项目的一部分

十四、Tomcat 依赖在哪里?

查看 Maven:

XML 复制代码
<dependency>
    <groupId>
        org.springframework.boot
    </groupId>

    <artifactId>
        spring-boot-starter-web
    </artifactId>
</dependency>

展开依赖树:

复制代码
spring-boot-starter-web

↓

spring-boot-starter-tomcat

因此:

复制代码
Tomcat自动引入

十五、Spring Boot 启动时发生了什么

启动:

java 复制代码
@SpringBootApplication
public class Application {

    public static void main(
            String[] args) {

        SpringApplication.run(
                Application.class,
                args
        );
    }
}

执行流程:

复制代码
sequenceDiagram

Main->>SpringApplication:
run()

SpringApplication->>IOC:
创建容器

IOC->>Tomcat:
启动Tomcat

Tomcat->>DispatcherServlet:
注册Servlet

DispatcherServlet->>Controller:
映射接口

十六、修改 Tomcat 端口

默认:

复制代码
8080

修改:

复制代码
server:
  port: 9090

启动后:

复制代码
http://localhost:9090

访问。


十七、打包部署

执行:

复制代码
mvn clean package

生成:

复制代码
app.jar

运行:

复制代码
java -jar app.jar

启动日志:

复制代码
Tomcat started on port(s): 8080

说明:

复制代码
内嵌Tomcat启动成功

十八、Jar 与 War 对比

项目 Jar War
部署方式 java -jar Tomcat部署
Tomcat 内嵌 外置
运维复杂度
Spring Boot推荐 ×

现代项目:

复制代码
绝大多数采用Jar部署

十九、生产环境部署流程

典型流程:

或者:

复制代码
Docker

↓

Kubernetes

↓

Spring Boot Jar

云原生部署。


二十、总结

在 Spring Boot 中:

复制代码
JSON

负责数据交换

而:

复制代码
Tomcat

负责网络通信

整个请求链路:

复制代码
浏览器

↓

Tomcat

↓

DispatcherServlet

↓

Controller

↓

Jackson

↓

JSON

↓

浏览器

Spring Boot 最大的价值在于:

复制代码
自动完成JSON转换

自动启动Tomcat

自动配置MVC

开发者只需要关注:

java 复制代码
@RestController

@RequestBody

@GetMapping

等业务代码即可。

可以这样理解:

复制代码
JSON解决了"数据如何传输"。

Tomcat解决了"请求如何到达"。

Spring Boot则把两者整合在一起,
让Java Web开发进入了真正的一键启动时代。
相关推荐
我命由我123451 小时前
Android Service - Service 生命周期变化、Service 与 Activity 双向交互
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
团象科技1 小时前
出海企业技术架构优化实地观察 拆解AWS Lambda无服务器的落地细节
架构·serverless·aws
Thecozzy1 小时前
Understand-Anything架构感悟
架构
李白的天不白1 小时前
Docker
spring boot
凤山老林1 小时前
Spring Boot 敏感数据脱敏优雅实现方案
java·spring boot·脱敏方案
J2虾虾1 小时前
Spring Boot实现发邮件功能
java·spring boot·spring
8Qi81 小时前
LeetCode 295:数据流的中位数(Median Finder)—— Java 题解 ✅
java·算法·leetcode·优先队列··中位数
competes1 小时前
数据查询方式最左匹配原则
java·大数据·前端·人工智能·windows
❀͜͡傀儡师1 小时前
告别脚手架:用 JBang 打通 Java、Kotlin、Python 的脚本化开发
java·python·kotlin·jbang