zoukankan      html  css  js  c++  java
  • springboot2 关于 json 数据的转化处理,基于 object_mapper

    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);
        }
    
    }
  • 相关阅读:
    Spring整合CXF之添加拦截器
    Spring整合CXF之发布WebService服务
    CXF添加自定义拦截器
    cxf处理一些Map等复杂类型
    webservice执行过程深入理解
    谈谈房车
    关于贷款消费
    记一次玩比特币的经历
    那年K城暑期工
    SpringBoot整合Xxl-Job
  • 原文地址:https://www.cnblogs.com/lovling/p/10531922.html
Copyright © 2011-2022 走看看