SpringMVC中json数据传输

8.SpringMVC中json数据传输

8.1 什么是json?

  • JSON (JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式
  • 它基于 ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

8.2 json与JavaScript关系

  • JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。
  • JSON 和 JS 对象互转

要实现从JSON字符串转换为JS对象,使用 JSON.parse() 方法:

var obj = JSON.parse('{"a": "Hello", "b": "World"}'); //结果是 {a: 'Hello', b: 'World'}

要实现从JS对象转换为JSON字符串,使用 JSON.stringify() 方法:

var json = JSON.stringify({a: 'Hello', b: 'World'}); //结果是 '{"a": "Hello", "b": "World"}'
  • 任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型。

    • 表示对象

    • {``"firstName"``: ``"Brett"``, ``"lastName"``: ``"McLaughlin"``}     
      
    • 表示数组

    • { 
      "people":[ 
      {
      "firstName": "Brett",      
      "lastName":"McLaughlin"    
      },   
      {    
      "firstName":"Jason",
      "lastName":"Hunter"
      }
      ]
      }
      这不难理解。在这个示例中,只有一个名为 people的变量,值是包含两个条目的数组,每个条目是一个人的记录,其中包含名和姓。上面的示例演示如何用括号将记录组合成一个值。当然,可以使用相同的语法表示更过多的值(每个值包含多个记录)。
      

8.3 Json转化器Jackson和FastJson

8.3.1 Jackson
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.11.1</version>
</dependency>

JSON转为Java对象

  1. 导入jackson的相关jar包(依赖)

  2. 创建Jackson核心对象 ObjectMapper ObjectMapper mapper = new ObjectMapper();

  3. 调用ObjectMapper的相关方法进行转换

    readValue(json字符串数据,Class)

Java对象转换JSON

  1. 使用步骤:导入jackson的相关依赖

  2. 创建Jackson核心对象 ObjectMapper ObjectMapper mapper = new ObjectMapper();

  3. 调用ObjectMapper的相关方法进行转换 mapper.writeValue(response.getWriter(),map);

转换方法
writeValue(参数1,obj):
参数1:
File:将obj对象转换为JSON字符串,并保存到指定的文件中
Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
writeValueAsString(obj):将对象转为json字符串
readValue(String json,Class aclass);将json字符串转为对象

8.3.2 FastJson

fastjson依赖

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.72</version>
</dependency>

测试代码

@RequestMapping("/xuan2")
public String testJson2(ServletResponse response) throws JsonProcessingException {

    //json对象
    User user1 = new User("郑楷",50,"女");
    User user2= new User("黄文",20,"女");
    User user3 = new User("杨深",80,"女");
    User user4 = new User("沙嗲",3,"女");
    User user5 = new User("郑楷",17,"女");

    Map<Integer,User> map =new HashMap();
    map.put(1,user1);
    map.put(2,user2);
    map.put(3,user3);
    map.put(4,user4);
    map.put(5,user5);

    return JSON.toJSONString(map);
}

JSON方法

在这里插入图片描述

8.4 编写测试

​ 第一步:编写controller层代码

  • 这里的@RestController=@Controller+@RequestBody
package com.xuan.controller;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.xuan.pojo.User;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.ServletResponse;

@RestController
public class JsonController {


    @RequestMapping("/xuan")
    public String testJson(ServletResponse response) throws JsonProcessingException {

        //json对象
        ObjectMapper mapper = new ObjectMapper();

        User user = new User();
        user.setName("郑泽楷");
        user.setAge(58);
        user.setGender("女");

        String string = mapper.writeValueAsString(user);

        return string;
    }
}

​ 第二步:编写关键配置文件

  • 下面是解决json乱码问题的关键配置
<!--json乱码问题配置-->
<mvc:annotation-driven>
    <mvc:message-converters register-defaults="true">
        <bean class="org.springframework.http.converter.StringHttpMessageConverter">
            <constructor-arg value="UTF-8"/>
        </bean>
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <property name="objectMapper">
                <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                    <property name="failOnEmptyBeans" value="true"/>
                </bean>
            </property>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

​ 第三步:做测试根据自己的路径

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值