2025/4/14
向
一、JSON格式
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。所以在springboot的实际项目中,我们也是使用json格式来进行数据传递。
1.1基本语法
JSON 中的对象是一个无序的键值对集合,同时不允许键值重复,键用花括号{}
表示。每个键值对之间用逗号,
分隔,键和值之间用冒号:
分隔。例如:
{ "name": "John", "age": 30
}
所以总结来说,其json格式中对象的数据结构,就是将键值对组合成一个集合,每个键值对之间使用逗号分隔开。
JSON 中的数组类型是一组有序的值,用方括号[]
表示。数组中的值可以是任何 JSON 数据类型,包括对象、数组、字符串、数字、布尔值或null
。例如:
[1, 2, 3, "four", true]
json格式中数组的数据结构是有序的,数组中的数据类型可以是json数据类型中的任意一个。
1.2 json的数据类型:
- 字符串:用双引号
""
括起来的字符序列,例如:"Hello, World!"
。 - 数字:可以是整数或浮点数,例如:
42
或3.14
。 - 布尔值:
true
或false
。 null
:表示空值。- 对象:如前面所述,用
{}
表示。 - 数组:用
[]
表示。
如下示例是一个更复杂的JSON示例:
{"name": "John Doe","age": 30,"isStudent": false,"hobbies": ["reading", "traveling", "sports"],"address": {"street": "123 Main St","city": "Anytown","state": "CA","zip": "12345"}
}
在这个示例中,最外层是一个对象,包含了name
、age
、isStudent
、hobbies
和address
等键值对。其中,hobbies
是一个数组,address
是一个嵌套的对象。
二、SpringBoot中常用的数据结构
2.1 类对象
public class User {private Long id;private String username;private String password;/* 省略get、set和带参构造方法 */
}
很熟悉就不同过多的说。
2.2 List对象
import com.itcodai.test.entity.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@RestController
@RequestMapping("/json")
public class JsonController {@RequestMapping("/user")public User getUser() {return new User(1, "测试", "123456");}@RequestMapping("/list")public List<User> getUserList() {List<User> userList = new ArrayList<>();User user1 = new User(1, "测试", "123456");User user2 = new User(2, "测试课", "123456");userList.add(user1);userList.add(user2);return userList;}@RequestMapping("/map")public Map<String, Object> getMap() {Map<String, Object> map = new HashMap<>(3);User user = new User(1, "测试", "123456");map.put("作者信息", test);map.put("博客地址", "https://blog.csdn.net/2401_84080967?spm=1000.2115.3001.5343");map.put("CSDN地址", "http://blog.csdn.net");map.put("测试数量", 001);return map;}
}
List
是一个有序的集合接口,它允许存储重复的元素。由于是有序的,你可以通过索引来访问列表中的元素,索引从 0 开始。List
接口有多个实现类,常见的有 ArrayList
、LinkedList
等。
在上述示例中使用的是ArrayList实现类:
ArrayList
:基于动态数组实现,它在随机访问元素时效率较高,因为可以通过索引直接定位到元素。但在插入和删除元素时,尤其是在列表中间进行操作,效率较低,因为需要移动后续元素。LinkedList
:基于双向链表实现,在插入和删除元素时效率较高,尤其是在列表的头部或尾部进行操作。但随机访问元素时效率较低,因为需要从头或尾开始遍历链表。
2.3 Map对象
Map
是一种键值对(key-value)的集合接口,它不允许存储重复的键,但允许值重复。每个键对应一个值,你可以通过键来快速查找对应的值。Map
接口有多个实现类,常见的有 HashMap
、TreeMap
等。
三、Spring Boot与Json
前端与后端数据交互
在前后端分离的开发模式下,前端和后端通常通过 HTTP 协议进行数据交互,JSON 凭借其简洁易读、易于解析的特性,成为了数据传输的首选格式。Spring Boot 作为后端框架,能够轻松地处理 JSON 数据。
例如,前端发送一个包含用户信息的 JSON 请求到 Spring Boot 后端:
{"username": "john_doe","email": "john@example.com","age": 30
}
在后端对应的JAVA对象如下:
class User {private String username;private String email;private int age;// Getters and Setters 省略
}
通过使用 @RequestBody
注解将这个 JSON 请求体自动映射到 Java 对象上
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserInfoController {@PostMapping("/users")public String createUser(@RequestBody User user) {// 处理用户信息return "User created successfully";}
}
Spring Boot 后端也可以将 Java 对象转换为 JSON 格式返回给前端,使用 @ResponseBody
注解(在 @RestController
中默认启用):
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserInfoController {@PostMapping("/users")public String createUser(@RequestBody User user) {// 处理用户信息return "User created successfully";}@GetMapping("/user-info")public User getUserInfo() {User user = new User();user.setUsername("jane_smith");user.setEmail("jane@example.com");user.setAge(25);return user; // 自动转换为JSON格式返回}
}
四、Spring Boot 默认对Json的处理
@RequestMapping("/user")public UserTest getUser() {return new UserTest(1L, "测试", "123456");}
@RequestMapping("/list")public List<UserTest> getUserList() {List<UserTest> userList = new ArrayList<>();UserTest user1 = new UserTest(1L, "测试", "123456");UserTest user2 = new UserTest(2L, "测试课", "123456");userList.add(user1);userList.add(user2);return userList;}
@RequestMapping("/map")public Map<String, Object> getMap() {Map<String, Object> map = new HashMap<>(3);UserTest user = new UserTest(1L, "测试", "123456");map.put("作者信息", user);map.put("博客地址", "https://blog.csdn.net/2401_84080967?spm=1000.2115.3001.5343");map.put("CSDN地址", "http://blog.csdn.net");map.put("测试数量", 001);return map;}
可以看出,不管是什么数据类型,都转成相应的 json 格式,这样就非常方便。
2025/4/14
每一步,都算数。