栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringMVC04:JSON的使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringMVC04:JSON的使用

本文为 SSM 框架系列之 SpringMVC 第四部分:JSON的使用
其它内容的链接如下:
【1】MyBatis01:初识 MyBatis 与 第一个 MyBaits 程序
【2】MyBatis02:CRUD 操作
【3】MyBatis03:配置解析
【4】MyBatis04:作用域和生命周期
【5】MyBatis05:分页
【6】MyBatis06:日志
【7】MyBatis07:使用注解开发
【8】MyBatis08:ResultMap 的结果集映射
【9】MyBatis09:动态 SQL 与缓存

目录:
  • 1 JSON 的定义
  • 1.1 JSON 的定义
    • 1.2 JSON 的特点
    • 1.3 JSON 和 Javascript 对象的区别
    • 1.4 JSON 的作用
  • 2 Javascript 对象与 JSON 的互换
    • 3 后端怎么返回 JSON 文件
  • 4 JSON 转换时的乱码问题怎么解决
  • 5 源码思维
    • 5.1 利用 JSON 返回 Java 集合
    • 5.2 利用 JSON 返回时间对象
    • 5.3 源码思维(代码复用)

1 JSON 的定义 1.1 JSON 的定义

JSON,即 JS 对象标记(Javascript Object Notation),是一种轻量级的数据交换格式,它本质上是一种文本文件。它的语法要求为:

  • 对象表示为键值对,数据由逗号分隔;
  • 花括号保存对象;
  • 方括号保存数组。

如:

[{"name": "sharm", "sex": "男"}, {"name": "jack", "sex": "男"}]
1.2 JSON 的特点
  • 采用完全独立于编程语言的文本格式来存储和表示数据;
  • 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言;
  • 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
1.3 JSON 和 Javascript 对象的区别

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

var obj = {a: 'Hello', b: 'World'}; //这是一个 Javascript 对象,注意键名也是可以使用引号包裹的
var json = "{"a": "Hello", "b": "World"}"; //这是一个 JSON 字符串,本质是一个字符串
1.4 JSON 的作用

前后端分离时代,前端负责渲染后端的数据;而后端负责生成接口,提供数据。而两者之间就通过 JSON 来进行联系。


2 Javascript 对象与 JSON 的互换



    
    Javascript 对象与 JSON 的互换







在 IDEA 中使用浏览器打开,F12 进入开发者模式,查看控制台输出:


3 后端怎么返回 JSON 文件

再次介绍完整的步骤:

1 新建一个 Module,配置 Web 框架;

① 右键 module,add Web Application frameworks Support;


③:

2 配置 pom.xml 文件;



    
        springmvc
        sharm
        1.0-SNAPSHOT
    
    4.0.0

    springmvc-json

    
    
        UTF-8
        UTF-8
        11
        11
        11
    

    
        
            com.fasterxml.jackson.core
            jackson-databind
            2.10.0
        

        
            org.springframework
            spring-webmvc
            5.1.9.RELEASE
        
        
            javax.servlet
            servlet-api
            2.5
        
        
            javax.servlet.jsp
            jsp-api
            2.2
        
        
            javax.servlet
            jstl
            1.2
        
    
    
    
    
        
            
                src/main/java
                
                    ***.xml
                
                false
            
            
                src/main/resources
                
                    ***.xml
                
                false
            
        
    

3 配置 web.xml 文件;




    
    
        springmvc
        org.springframework.web.servlet.DispatcherServlet
        
        
            contextConfigLocation
            classpath:springmvc-servlet.xml
        
        
        1
    

    
    
    
        springmvc
        /
    

    
    
        encoding
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            utf-8
        
    
    
        encoding
        /*
    


4 配置 spring 配置文件;




    
    
    
    
    
    

    
    
        
        
        
        
    


5 书写 User 实体类(也就是需要返回的 JSON 对象);

package sharm.pojo;

public class User {
    private String name;
    private int age;
    private String sex;

    public User() {
    }

    public User(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + ''' +
                ", age=" + age +
                ", sex='" + sex + ''' +
                '}';
    }
}

6 书写 Controller 控制器;

package sharm.controller;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import sharm.pojo.User;

@Controller
// @RestController
public class JSONController {
    // 其中 produces 是为了设置返回的编码类型,防止乱码
    @RequestMapping(value = "/jsonTest", produces = "application/json;charset=utf-8")
    @ResponseBody
    public String jsonTest() throws JsonProcessingException {
        // 一:创建一个 jackson 的对象映射器,用来解析数据
        ObjectMapper objectMapper = new ObjectMapper();
        // 二:创建一个用于转换成 JSON 文件的 Java 对象
        User sharm = new User("Sharm", 24, "男");
        // 三:将对象解析成 JSON 格式
        String str = objectMapper.writevalueAsString(sharm);
        // 四:由于 @ResponseBody 注解,这里会直接返回字符串,而无需走视图解析器,当然为了方便起见也可以不使用 @ResponseBody 注解,而使用给类定义一个 @RestController 注解来达到目的
        // 如果是前后端分离的情况,那肯定不走视图解析器了,只要返回 json 即可
        return str;
    }
}

7 前端返回;


4 JSON 转换时的乱码问题怎么解决

只需在 springmvc 的配置文件上添加一段消息StringHttpMessageConverter转换配置,而无需在控制器的每个方法上都设置一个 utf-8 的参数注解:


   
       
           
       
       
           
               
                   
               
           
       
   


5 源码思维 5.1 利用 JSON 返回 Java 集合
@RestController
public class JSONController {
    // 其中 produces 是为了设置返回的编码类型,防止乱码
    @RequestMapping(value = "/jsonTest", produces = "application/json;charset=utf-8")
    public String jsonTest() throws JsonProcessingException {

        ObjectMapper objectMapper = new ObjectMapper();

        User sharm = new User("sharm", 24, "男");
        User jack = new User("jack", 24, "男");
        User luma = new User("luma", 24, "男");
        User loro = new User("lora", 24, "男");

        List list = new ArrayList();
        list.add(sharm);
        list.add(jack);
        list.add(luma);
        list.add(loro);
        String listStr = objectMapper.writevalueAsString(list);

        return listStr;
    }
}

浏览器返回如下:

5.2 利用 JSON 返回时间对象
@RequestMapping("/jsonTimeTest")
public String jsonTimeTest() throws JsonProcessingException {
    // 自定义日期格式对象
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    // 指定日期格式
    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
    mapper.setDateFormat(sdf);

    Date date = new Date();
    String str = mapper.writevalueAsString(date);

    return str;
}

浏览器返回如下:

5.3 源码思维(代码复用)

从上述两个例子中可以看出,不同的方法中有很多代码是相同的,在实际开发中我们可以使用复用、重载的方法来提高代码的复用性。

首先可以发现,以上两个例子都会共用 ObjectMapper对象,那么整理得到一个工具类为:

package sharm.utils;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;

import java.text.SimpleDateFormat;

public class JsonUtils {

    public static String getJson(Object object) {
        return getJson(object, "yyyy-MM-dd HH:mm:ss");
    }

    public static String getJson(Object object, String dateFormat) {
        ObjectMapper mapper = new ObjectMapper();

        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
        mapper.setDateFormat(sdf);

        try {
            return mapper.writevalueAsString(object);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return null;
    }
}

那么原 5.1 的代码可以改写为:

// 其中 produces 是为了设置返回的编码类型,防止乱码
@RequestMapping(value = "/jsonTest", produces = "application/json;charset=utf-8")
public String jsonTest() throws JsonProcessingException {

    User sharm = new User("sharm", 24, "男");
    User jack = new User("jack", 24, "男");
    User luma = new User("luma", 24, "男");
    User loro = new User("lora", 24, "男");

    List list = new ArrayList();
    list.add(sharm);
    list.add(jack);
    list.add(luma);
    list.add(loro);

    String listStr = JsonUtils.getJson(list);

    return listStr;
}

原 5.2 的代码可以改写为:

@RequestMapping("/jsonTimeTest")
public String jsonTimeTest() throws JsonProcessingException {
    Date date = new Date();
    String str = JsonUtils.getJson(date);

    return str;
}

That’s OK!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/458566.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号