【JavaEE】快速上手JSON:构建高效 Java 后端数据桥梁,开启交互新篇,以 @RequestBody 为引的探索之旅

1.接收Json数据@RequestBody

如果对Json不了解,可以看2,3,4,5章。

接收Json数据需要使用注解@RequestBody

RequestBody: 请求正⽂,意思是这个注解作⽤在请求正⽂的数据绑定,请求参数必须在写在请求正⽂中。

后端实现:

java 复制代码
//   User 类
public class User {

    private String name;
    private Integer age;
    private String sex;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }
}
java 复制代码
@RequestMapping("/basic")
@Controller
public class BasicController {

    // http://127.0.0.1:8080/hello?name=lisi
    @RequestMapping("/user")
    @ResponseBody
    public String user(@RequestBody User user) // @RequeatParam注解
    {
        return "接收到的参数user是:" + user.toString();
    }

}

运行后,在Postman工具中传参Json数据:

2.Json的概念

JSON:JavaScript Object Notation 【JavaScript 对象表⽰法】

JSON 是⼀种轻量级的数据交互格式。 它基于 ECMAScript (欧洲计算机协会制定的js规范)的⼀个⼦集,采⽤完全独⽴于编程语⾔的⽂本格式来存储和表⽰数据。

简单来说:JSON就是⼀种数据格式, 有⾃⼰的格式和语法, 使⽤⽂本表⽰⼀个对象或数组的信息, 因此 JSON本质是字符串。 主要负责在不同的语⾔中数据传递和交换。

类似于:

• 国际通⽤语⾔-英语

• 中国56个⺠族不同地区的通⽤语⾔-普通话 有⾃⼰的语法, 其他语⾔也认识。

JSONJavascript 的关系

没有关系, 只是语法相似。 js开发者能更快的上⼿⽽已, 但是他的语法本⾝⽐较简单, 所以也很好学

3.Json语法

JSON 是⼀个字符串,其格式⾮常类似于 JavaScript 对象字⾯量的格式 我们先来看⼀段JSON数据:

javascript 复制代码
{
	"squadName": "Super hero squad",
	"homeTown": "Metro City",
	"formed": 2016,
	"secretBase": "Super tower",
	"active": true,
	"members": [{
			"name": "Molecule Man",
			"age": 29,
			"secretIdentity": "Dan Jukes",
			"powers": ["Radiation resistance", "Turning tiny", "Radiation blast "]
		},
		{
			"name": "Madame Uppercut",
			"age": 39,
			"secretIdentity": "Jane Wilson",
			"powers": ["Million tonne punch", "Damage resistance", "Superhuman reflexes "]
		},
		{
			"name": "Eternal Flame",
			"age": 1000000,
			"secretIdentity": "Unknown",
			"powers": ["Immortality", "Heat Immunity", "Inferno",
				"Teleportation", "Interdimensional travel"
			]
		}
	]
}

上述代码也可以压缩表示:

javascript 复制代码
{"squadName":"Super hero squad","homeTown":"Metro City","formed":2016,"secretBase":"Super tower","active":true,"members":[{"name":"Molecule Man","age":29,"secretIdentity":"Dan Jukes","powers":["Radiation resistance","Turning tiny","Radiation blast "]},{"name":"Madame Uppercut","age":39,"secretIdentity":"Jane Wilson","powers":["Million tonne punch","Damage resistance","Superhuman reflexes "]},{"name":"Eternal Flame","age":1000000,"secretIdentity":"Unknown","powers":["Immortality","Heat Immunity","Inferno","Teleportation","Interdimensional travel"]}]}

上⾯描述和第一个的数据⼀样, 只不过第一个数据进⾏了格式化, 更易读。

JSON的语法:

1.数据在键值对(Key/Value)中

2.数据由逗号(,)分割

3.对象⽤大括号({})表示

4.数组⽤([])表示

5.值可以为对象, 也可以为数组, 数组中可以包含多个对象

JSON的两种结构:

  1. 对象: ⼤括号{}保存的对象是⼀个⽆序的键值对集合。 ⼀个对象以左括号{ 开始,}右括号结束。每个"键"后跟⼀个冒号:,键值对使⽤逗号,分隔

    javascript 复制代码
    {"name": "Molecule Man","age": 29,"secretIdentity": "Dan Jukes"}
  2. 数组: 中括号 []保存的数组是值(value)的有序集合。⼀个数组以左中括号[开始,]右括号结束,值之间使⽤逗号分隔。

    javascript 复制代码
    ["Million tonne punch", "Damage resistance", "Superhuman reflexes "]

所以, 以下都是合法的JSON数据:

javascript 复制代码
{"name":"admin","age":18}
["hello", 3.1415, "json"]
[{"name":"admin","age":18},{"name":"root","age":16},{"name":"张三","age":20}]

可以使⽤在线JSON格式化⼯具来进⾏校验和书写: 在线JSON校验格式化⼯具(Be JSON)

4.JSON字符串和Java对象互转

JSON本质上是⼀个字符串, 通过⽂本来存储和描述数据。

Spring MVC框架也集成了JSON的转换⼯具, 我们可以直接使⽤, 来完成JSON字符串和Java对象的互转。本质上是jackson-databind提供的功能, Spring MVC框架中已经把该⼯具包引⼊了进来, 咱们直接使⽤即可, 如果脱离Spring MVC使⽤, 需要引⼊相关依赖:

xml 复制代码
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.13.5</version>
</dependency>

JSON的转换⼯具包有很多, jackson-databind只是其中的⼀种.

java 复制代码
public class JSONUtils {
	private static ObjectMapper objectMapper = new ObjectMapper(); 3
	public static void main(String[] args) throws JsonProcessingException {
		Person person = new Person();
		person.setId(5);
		person.setName("zhangsan");
		person.setPassword("123456");
		//对象转为JSON字符串
		String jsonStr = objectMapper.writeValueAsString(person);
		System.out.println("JSON字符串为:"+jsonStr);
		//JSON字符串转为对象
		Person p = objectMapper.readValue(jsonStr,Person.class);
		System.out.println("转换的对象
		id:"+p.getId()+",name:"+p.getName()+",password:"+p.getPassword());
	}
 }

使⽤ObjectMapper 对象提供的两个⽅法, 可以完成对象和JSON字符串的互转 writeValueAsString: 把对象转为JSON字符串

readValue: 把字符串转为对象

5.JSON优点

  1. 简单易⽤: 语法简单,易于理解和编写,可以快速地进⾏数据交换
  2. 跨平台⽀持: JSON可以被多种编程语⾔解析和⽣成, 可以在不同的平台和语⾔之间进⾏数据交换和传输
  3. 轻量级: 相较于XML格式, JSON数据格式更加轻量级, 传输数据时占⽤带宽较⼩, 可以提⾼数据传输速度
  4. 易于扩展: JSON的数据结构灵活,⽀持嵌套对象和数组等复杂的数据结构,便于扩展和使⽤
  5. 安全性: JSON数据格式是⼀种纯⽂本格式,不包含可执⾏代码, 不会执⾏恶意代码,因此具有较⾼的安全性

基于以上特点, JSON在Web应⽤程序中被⼴泛使⽤, 如前后端数据交互、API接⼝数据传输等。

相关推荐
艾迪的技术之路14 分钟前
redisson使用lock导致死锁问题
java·后端·面试
今天背单词了吗98032 分钟前
算法学习笔记:8.Bellman-Ford 算法——从原理到实战,涵盖 LeetCode 与考研 408 例题
java·开发语言·后端·算法·最短路径问题
天天摸鱼的java工程师35 分钟前
使用 Spring Boot 整合高德地图实现路线规划功能
java·后端
东阳马生架构1 小时前
订单初版—2.生单链路中的技术问题说明文档
java
咖啡啡不加糖1 小时前
暴力破解漏洞与命令执行漏洞
java·后端·web安全
风象南1 小时前
SpringBoot敏感配置项加密与解密实战
java·spring boot·后端
DKPT1 小时前
Java享元模式实现方式与应用场景分析
java·笔记·学习·设计模式·享元模式
Percep_gan1 小时前
idea的使用小技巧,个人向
java·ide·intellij-idea
缘来是庄1 小时前
设计模式之迭代器模式
java·设计模式·迭代器模式