第三章(续)SpringBoot处理JSON数据

本文介绍在SpringBoot中使用Ajax与JSON数据交互,重点讲解Jackson库的使用,包括对象与JSON的转换、接口调试以及Jackson在处理GET、ALL、ADD接口时的应用。文中还对比了Jackson与其他JSON库如Gson、FastJSON和JSON-lib的特点。

Ajax

        AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。

        通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

        而在Ajax中,最常用的就是返回JSON格式的数据。

JSON

       JSON 是存储和交换文本信息的语法,类似 XML。JSON 比 XML 更小、更快,更易解析。

易于人阅读和编写。C、Python、C++、Java、PHP、Go等编程语言都支持 JSON。

        在当下前后端分离的开发模式盛行的时代,JSON是作为主流的前后端数据的交互方式。为了能够友好且快速的解决数据在对象和JSON数据之间的转换,推出了很多用来解决这个问题的插件。例如:Jackson、Gson、Fastjson、Json-lib.这些是相对流行的几个工具。

        关于JSON格式的语法,这里列举对象和数组的表示法:

User对象:
{
    "username":"admin",
    "password":"123456",
    "gender":"男",
    "level":"M"
}

UserList:
[
    {
        "username":"admin",
        "password":"123456",
        "gender":"男",
        "level":"M"
    },
    {
        "username":"Alice",
        "password":"654321",
        "gender":"女",
        "level":"D"
    },
    {
        "username":"Lucy",
        "password":"852147",
        "gender":"女",
        "level":"A"
    }
]

Jackson

        Spring Boot默认使用Jackson来序列化和反序列化REST API中的请求和响应对象。Jackson基于Java应用库,可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。Jackson所依赖的jar包较少,简单易用并且性能也要相对高些,并且Jackson社区相对比较活跃,更新速度也比较快。这也是它能够成为SpringBoot默认Json处理器的原因。

Gson

        GSON是Google提供的开源的,用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个Json字符转成一个Java对象,或者将一个Java转化为Json字符串。可以不依赖其他包直接使用,使用方便,性能也很好。但是它必须完全解析文档,如果要按需解析的话可以拆分Json来读取,操作和解析方法复杂;适用于需要处理超大型JSON文档、不需要对JSON文档进行按需解析、性能要求较高的场合。

FastJSON

        FastJSON是阿里公司旗下的产品, 是一个使用Java语言开发的库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象。与主流的Jackson不同,存在一些兼容性问题。

JSON-lib

        Json-lib 是最早用来处理JSON数据的库,因其需要依赖很多其他的包,且性能和效率很差,已经逐渐淘汰。

使用Jackson处理JSON数据

        在前面的内容我们提到过,Jackson是SpringBoot默认支持的库,其依赖已经包括在 spring-boot-starter-web的启动依赖中,并提供相关的默认配置,所以我们无需再做任何配置,就可以使用其功能。

        要使数据在对象和JSON格式之间进行转换,我们还需要借助@RequestBody@ResponseBody注解。@RequestBody注解是将客户端提交的JSON数据转化为Java对象,而@ResponseBody注解,则是将相应给客户端的Java对象转换成JSON格式的数据。在前后端分离的项目中,我们会专门提供API接口类,该类只有返回对象的方法,不需要返回视图,所以我们通常使用@RestController代替@Controller+@ResponseBody注解的组合。

 通过以下步骤,掌握如何使用Jackson处理对象传输。

第一步:我们需要创建一个Controller,来接受客户端的请求,这里我们将实现查询一个对象、多个对象,新增一个对象,多个对象4个方法,来观察如何实现Java对象转JSON、List转JSON以及JSON转对象,JSON转List的用法。

src/main/java/com.alice.demo/controller/JsonController.java

package com.alice.demo.controller;

import com.alice.demo.pojo.User;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;
import java.util.List;

@RestController
@RequestMapping("/json")
public class JsonController {
    /**
    *  Java对象转JSON
    */
    @GetMapping("/getOne")
    public User getOneUser(){
        return new User("admin",13456L,"admin@qq.com.cn","M");
    }

    /**
    *  JavaList集合转JSON
    */
    @GetMapping("/getAll")
    public List<User> getAllUser(){
        return Arrays.asList(
                new User("admin",13456L,"admin@qq.com.cn","M"),
                new User("alice",1235846L,"alice@qq.com.cn","L"),
                new User("jack",985475L,"jack@qq.com.cn","D"),
                new User("anne",963245L,"anne@qq.com.cn","D")
        );
    }

    /**
    *  JSON对象转Java对象
    */
    @PostMapping("/addOne")
    public String addOneUser(@RequestBody User user){
        System.out.println(user);
        return "新增成功";
    }

    /**
    *  JSON数组转Java List集合
    */
    @PostMapping("/addMany")
    public String addManyUser(@RequestBody List<User> users){
        users.forEach((user)->{
            System.out.println(user);
        });
        return "新增成功";
    }
}

第二步:启动服务,在Postman的API调试中,调试接口,观察数据显示的格式。

调试 /json/getOne 接口

 调试 /json/getAll 接口

        

  调试 /json/addOne接口

         观察控制台输出的对象

 调试 /json/addMany接口

         观察控制台输出的集合     

 下一章:SpringBoot中处理Error和Exception

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值