Spring 请求之传递 JSON 数据的操作方法

2025-05-14 07:29:08 152
魁首哥

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 的两种结构

对象:大括号 {} 保存的对象是一个无序的键值对集合。一个对象以左括号 { 开始,右括号 } 结束。每个“”后跟一个冒号 :,键值对使用逗号 , 分隔

数组:中括号 [] 保存的数组是值(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 使用,就需要引入相关依赖

  
    com.faster.jackson.core  
    jackson-databind  
    2.13.5  

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 优点

  • 简单易用:语法简单,易于理解和编写,可以快速地进行数据交换
  • 跨平台支持:json 可以被多种编程语言解析和生成,可以在不同的平台和语言之间进行数据交换和传输
  • 轻量级:相较于 xml 格式,json 数据格式更加轻量级,传输数据时占用带宽较小,可以提高数据传输速度
  • 易于扩展:json 的数据结构灵活,支持嵌套对象和数组等复杂的数据结构,便于扩展和使用
  • 安全性: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 对象赋值

到此这篇关于spring请求之传递json数据的文章就介绍到这了,更多相关spring请求传递json数据内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

分享
海报
152
上一篇:C 语言中enum枚举的定义和使用小结 下一篇:SpringBoot中5种动态代理的实现方案

忘记密码?

图形验证码