【Spring】“请求“ 之传递 JSON 数据

简介: 【Spring】“请求“ 之传递 JSON 数据

JSON 概念

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

JSON 就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此 JSON 本质是字符串,主要负责在不同的语言中数据传递和交换

类似于:

  • 国际通用语言——英语
  • 中国 56 个民族不同地区的通用语言——普通话
    有自己的语法,其他语言也认识

JSONJavaScript 没有关系,只是语法类似,JavaScript 开发者能更快的上手而已,但是他的语法本身比较简单,所以也很好学


JSON 语法

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

{
    "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"]
        }
    ]
}

也可以压缩表示:

{"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"]}]}
  • 和上面描述的数据一样,只不过上面进行了格式化,更易读

JSON 的语法

  • 数据在键值对(Key/Value)中
  • 数据由 , 分隔
  • 对象用 {} 表示
  • 数组用 [] 表示
  • 值可以为对象,也可以为数组,数组中可以包含多个对象

JSON 的两种结构

  1. 对象:大括号 {} 保存的对象是一个无序的键值对集合。一个对象以左括号 { 开始,右括号 } 结束。每个“”后跟一个冒号 :,键值对使用逗号 , 分隔
  2. 数组:中括号 [] 保存的数组是值(value)的有序集合。一个数组以左中括号 [ 开始,右中括号 ] 结束。值之间使用 , 分隔

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

{"name": "admin", "age": 18}  
["hello", 3.1415, "json"]  
[{"name": "admin", "age": 18}, {"name": "root", "age": 16}, {"name": "张三", "age": 20}]

JSON 字符串和 Java 对象互转

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

Spring MVC 框架也集成了 JSON 的转换工具,我们可以直接使用,来完成 JSON 字符串和 Java 对象的互转

本质上是 jackson-databind 提供的功能,Spring MVC 框架中已经把该工具包引入了进来,我们可以直接进行使用。如果脱离了 Spring MVC 使用,就需要引入相关依赖

<dependency>  
    <groupId>com.faster.jackson.core</groupId>  
    <artifactId>jackson-databind</artifactId>  
    <version>2.13.5</version>  
</dependency>
  • JSON 的转换工具包有很多,jackson-databind 只是其中一种
import com.fasterxml.jackson.core.JsonProcessingException;  
import com.fasterxml.jackson.databind.ObjectMapper;  
  
public class JSONUtils {  
    private static ObjectMapper objectMapper = new ObjectMapper();  
  
    public static void main(String[] args) throws JsonProcessingException {  
        Person person = new Person();  
        person.setId(4444);  
        person.setName("Yechiel");  
        person.setPassword("3018");  
  
        //对象转为 JSON 字符串  
        String jsonStr = objectMapper.writeValueAsString(person);  
        System.out.println(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:把 JSON 字符串转换为对象

JSON 优点

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

基于以上特点,JSON 在 Web 应用程序中被广泛使用,如前后端交互,API 接口数据传输等


传递 JSON 对象

接收 JSON 对象,需要使用 @RequestBody 注解

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

后端实现:

@RequestMapping("/m8")  
    public Object method8(@RequestBody Person person){  
        return person.toString();  
    }  
}

使用 Postman 来发送 JSON 请求:

  • 可以看到,后端正确接收了,通过 Fiddler 观察一下请求参数

尝试去掉 @RequestBody 试试

@RequestMapping("/m9")  
public Object method9(Person person){  
    return person.toString();  
}

请求响应结果如下:

  • 后端未能成功给 Person 对象赋值


目录
打赏
0
2
2
0
18
分享
相关文章
淘宝商品评论API接口,json数据示例参考
淘宝开放平台提供了多种API接口来获取商品评论数据,其中taobao.item.reviews.get是一个常用的接口,用于获取指定商品的评论信息。以下是关于该接口的详细介绍和使用方法:
SPL 处理多层 JSON 数据比 DuckDB 方便多了
esProc SPL 处理多层 JSON 数据比 DuckDB 更便捷,尤其在保留 JSON 层次与复杂计算时优势明显。DuckDB 虽能通过 `read_json_auto()` 将 JSON 解析为表格结构,但面对深层次或复杂运算时,SQL 需频繁使用 UNNEST、子查询等结构,逻辑易变得繁琐。而 SPL 以集合运算方式直接处理子表,代码更简洁直观,无需复杂关联或 Lambda 语法,同时保持 JSON 原始结构。esProc SPL 开源免费,适合复杂 JSON 场景,欢迎至乾学院探索!
PHP技巧:解析JSON及提取数据
这就是在PHP世界里探索JSON数据的艺术。这场狩猎不仅仅是为了获得数据,而是一种透彻理解数据结构的行动,让数据在你的编码海洋中畅游。通过这次冒险,你已经掌握了打开数据宝箱的钥匙。紧握它,让你在编程世界中随心所欲地航行。
124 67
Spring Boot返回Json数据及数据封装
在Spring Boot中,接口间及前后端的数据传输通常使用JSON格式。通过@RestController注解,可轻松实现Controller返回JSON数据。该注解是Spring Boot新增的组合注解,结合了@Controller和@ResponseBody的功能,默认将返回值转换为JSON格式。Spring Boot底层默认采用Jackson作为JSON解析框架,并通过spring-boot-starter-json依赖集成了相关库,包括jackson-databind、jackson-datatype-jdk8等常用模块,简化了开发者对依赖的手动管理。
28 3
配置Nginx根据IP地址进行流量限制以及返回JSON格式数据的方案
最后,记得在任何生产环境部署之前,进行透彻测试以确保一切运转如预期。遵循这些战术,守卫你的网络城堡不再是难题。
75 3
如何在 Postman 中上传文件和 JSON 数据
如果你想在 Postman 中同时上传文件和 JSON 数据,本文将带你一步一步地了解整个过程,包括最佳实践和技巧,让你的工作更轻松。
如何在 Postman 中发送 JSON 数据
我们将深入探讨使用 Postman 发送 JSON 数据这一主题,Postman 是一款强大的 API 测试和开发工具。无论您是经验丰富的开发人员还是新手,掌握这项技能对于高效的 API 测试和开发都至关重要。
怎样用 esProc 计算来自 Restful 的多层 json 数据
esProc 是一款强大的数据处理工具,可简化 Java 处理 Restful 接口返回的复杂多层 JSON 数据的难题。通过 esProc,不仅能轻松访问和解析 Restful 数据,还能高效完成复杂计算任务,并可无缝嵌入 Java 应用中作为计算引擎使用。例如,筛选特定分类订单或计算金额,esProc 的脚本简洁直观,远优于传统 SQL 或纯 Java 实现。此外,esProc 支持安全认证(如 Cookie 和 Token)及 JDBC 集成,为开发者提供灵活高效的解决方案。
|
2天前
|
SpringBoot自动配置的原理是什么?
Spring Boot自动配置核心在于@EnableAutoConfiguration注解,它通过@Import导入配置选择器,加载META-INF/spring.factories中定义的自动配置类。这些类根据@Conditional系列注解判断是否生效。但Spring Boot 3.0后已弃用spring.factories,改用新格式的.imports文件进行配置。
30 0
微服务——SpringBoot使用归纳——Spring Boot集成Thymeleaf模板引擎——Thymeleaf 介绍
本课介绍Spring Boot集成Thymeleaf模板引擎。Thymeleaf是一款现代服务器端Java模板引擎,支持Web和独立环境,可实现自然模板开发,便于团队协作。与传统JSP不同,Thymeleaf模板可以直接在浏览器中打开,方便前端人员查看静态原型。通过在HTML标签中添加扩展属性(如`th:text`),Thymeleaf能够在服务运行时动态替换内容,展示数据库中的数据,同时兼容静态页面展示,为开发带来灵活性和便利性。
122 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等