1,当今的互联网开发行业,JSON 这种数据格式越来越成为网络开发的主流,尤其是前后端分离之后,几乎百分百的数据交互方式都是采用 JSON

2,由于 SpringMVC 框架的封装性,我们日常开发中只需要在 控制器 加上 @ResponseBody 注解,那么该类中方法返回的值就会自动转化为 JSON 格式响应给请求方,这让我们省去可很多麻烦

3,但是如果我们在程序中需要自己转化应该怎么操作呢,SpringBoot 内置了一个 ObjectMapper 的类,我们可以直接注入使用

4,使用方式如下,首先声明一个实体类 User,使用 lombok 库

package com.hwq.collection.model;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString; @Getter
@Setter
@ToString
public class User {
private Integer id;
private String name;
private Integer sex;
}

5,常用的两种转化方式

package com.hwq.collection;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.hwq.collection.model.User;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List; @RunWith(SpringRunner.class)
@SpringBootTest
public class CollectionApplicationTests { /**
* 注入 JSON 的操作类
*/
@Autowired
ObjectMapper jsonMapper; private String jsonStr; /**
* 将数据转化为 JSON 字符串,这个很简单
*/
@Before
public void before() throws IOException {
List<User> userList = new LinkedList<User>();
for (int i = 1; i <= 20; i++) {
User user = new User();
user.setId(1);
user.setName("张" + i);
user.setSex(i % 2);
userList.add(user);
}
jsonStr = jsonMapper.writeValueAsString(userList);
// System.out.println(jsonStr);
} /**
* 将 JSON 字符串映射成对应的 类 集合
* 注意:转化为类时,方法的第二个参数直接写 类.calss 即可
* 但是如果是转化为 List 集合,方法的第二个参数需要用 TypeReference 类
*/
@Test
public void contextLoads() throws IOException{
List<User> userList1 = jsonMapper.readValue(jsonStr, new TypeReference<List<User>>() {});
System.out.println(userList1.get(0).getClass()); // User
System.out.println(userList1.get(0).getId()); // 1
// System.out.println(userList1);
} /**
* 当然,如果我们只知道 JSON 字符串要转化为 List 集合,但是并不知道 List 内元素的具体类型
* 或者返回的类型是参吃不齐的数据,这时方法的第二个参数我可以直接写 List.class
* 这样返回的就是一个 LinkedHashMap 集合数据,这种方式更加灵活
*/
@After
public void after() throws IOException {
List<LinkedHashMap> userList2 = jsonMapper.readValue(jsonStr, List.class);
System.out.println(userList2.get(0).getClass()); // LinkedHashMap
System.out.println(userList2.get(0).get("id")); // 1
// System.out.println(userList2);
} }

JAVA SpringBoot2 关于 JSON 数据处理,基于 ObjectMapper的更多相关文章

  1. ObjectMapper用于将java对象转换为json格式数据以及JSONObject对象解析json格式数据

    ObjectMapper objectMapper = new ObjectMapper(); //反序列化的时候如果多了其他属性,不抛出异常 objectMapper.configure(Deser ...

  2. jackson java对象和json对象的互相转换

    概述 Jackson框架是基于Java平台的一套数据处理工具,被称为“最好的Java Json解析器”. Jackson框架包含了3个核心库:streaming,databind,annotation ...

  3. json相关类库,java对象与json相互转换

    有效选择七个关于Java的JSON开源类库 转自:http://www.open-open.com/lib/view/open1397870197828.html 翻译: (英语原文:http://w ...

  4. fastJson java后台转换json格式数据

    什么事JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Progra ...

  5. 【多端应用开发系列1.1.1 —— Android:使用新浪API V2】服务器Json数据处理——Json数据概述

    [前白] 一些基础的东西本系列中就不再详述了,争取尽量写些必不可少的技术要点. 由于本系列把Web Service 构建放到了第二部分,Android项目就采用新浪微博API v2作为服务器端. [原 ...

  6. JSON数据处理框架Jackson精解第一篇-序列化与反序列化核心用法

    Jackson是Spring Boot默认的JSON数据处理框架,但是其并不依赖于任何的Spring 库.有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的,没有这种限制.它提供了很 ...

  7. Java 下的 JSON库性能比较:JSON.simple

    JSON已经成为当前服务器与WEB应用之间数据传输的公认标准,不过正如许多我们所习以为常的事情一样,你会觉得这是理所当然的便不再深入思考了.我们很少会去想用到的这些JSON库到底有什么不同,但事实上它 ...

  8. JAVA中使用JSON进行数据传递

    最近在做一个基于JAVA Servlet的WEB应用以及对应的Anroid应用客户端的开发工作. 其中,在接口的访问和数据的传输方面使用的比较多的是使用JSON对象来操作格式化数据:在服务器端采用JS ...

  9. Android中实现java与PHP服务器(基于新浪云免费云平台)http通信详解

    Android中实现java与PHP服务器(基于新浪云免费云平台)http通信详解 (本文转自: http://blog.csdn.net/yinhaide/article/details/44756 ...

随机推荐

  1. java基础-arrayList

      ArrayList: 结构之钱了解了,ArrayList()会构造出一个初始容量=10的空的列表: ArrayList()的增加和删除都是拷贝数组到新的数组(如果当前数组容量不足的话),把数组内的 ...

  2. redis配置文件说明

    redis.conf 配置项说明如下: Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no 当Redis以守护进程方式运行时,Redis默认 ...

  3. 用理论告诉你 三极管和MOS管的区别在哪

    在电路设计当中假设我们想要对电流中止控制,那就少不了三极管的帮助.我们俗称的三极管其全称为半导体三极管,它的主要作用就是将微小的信号中止放大.MOS管与三极管有着许多相近的地方,这就使得一些新手不断无 ...

  4. WMware Vsphere取消某虚机的漂移

    由于一些业务特性,有一些虚机不应该完全受集群DSR控制.下面记录一下如何更改某一虚机的漂移属性. 1.环境 VMware Vsphere web client 6.5 2.点击需要配置虚机所在的集群, ...

  5. JavaScript中的ononline事件和onoffline事件

    关于这个时间的描述到处都有,但基本上都是说离线在线什么的我一下子还没反应过来.后再在这里看到了一句话:"断开网络再联网试试,就可以看到连线的提示."这才反应过来,原来指的是网络状态 ...

  6. win10刻录光盘失败,一直显示有准备好写入到光盘中的文件

    这是因为前面刻录留下的缓存导致的 解决方法是,删除系统刻录缓存文件 刻录缓存路径大概在以下位置(其中ase那个地方需要修改,改成自己的登录用户账号名即可) C:\Users\ase\AppData\L ...

  7. OpenStack搭建Q版在控制节点上的环境准备(step2)

    接下来是只需要在控制节点上准备的环境配置.其中虽然NTP服务需要在所有节点上都安装,但NTP服务在控制节点和其他的节点上的配置是不同的,所以不把它放在step1的公共配置中进行准备.如下: 1.配置N ...

  8. JSP和Struts2、Hibernate、Spring3基础内容和原理

    一.JSP工作原理 1.首先是利用客户端浏览器,然后由客户端浏览器请求JSP页面,向JSP服务器发出请求. 2.JSP服务器内部原理 JSP服务器首先在收到客户端传送过来的请求后,将JSP页面编译成S ...

  9. C++Primer第五版——习题答案目录

    目前正在刷<C++Primer>这本书,会在博客上记录课后习题答案,答案仅供参考. 因为水平有限,如有有误之处,希望大家不吝指教,谢谢! 目录地址 使用的系统为:win 10,编译器:VS ...

  10. samba、ftp和ssh服务

    samba服务 Smb主要作为网络通信协议; Smb是基于cs架构: 完成Linux与windows之间的共享:linux与linux之间共享用NFS 第一步:安装samba [root@ken ~] ...