一、JSON简介

1、什么是JSON?
2、JSON的格式:
{"name":"zyh"}
{"age":"18"}
{"sex":"man"}
3、JSON和JavaScript的关系
  • JSON是JavaScript对象的字符串表示法,它使用字符串文本表示一个JS对象。
       /*JS对象*/var user = {id: 1,name: "hang",sex: "男"};/*JSON字符串*/var json = `{"id":"1","name":"zyh","sex":"男"}`


我们可以在控制台打印输出JS对象和JSON字符串。

        //将JSON字符串转换为JS对象let xiaochen = JSON.parse('{"id":"112","name":"xiaochen","sex":"女"}');//将JS对象转换为JSON字符串let xiaoli = JSON.stringify({id:113,name:"xiaoli",sex:"男"});

在控制台打印输出

二、JackSon的使用

首先我们在项目.pxm配置中导入Jackson的依赖
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.10.0</version>
</dependency>

搭建测试环境:

  • 实体类:User
package com.zyh.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class User {private String name;private int age;private String sex;
}
  • 在web.xml 中注册servlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!--注册Servlet--><servlet><servlet-name>SpringMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc-servlet.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>SpringMVC</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!--注册过滤器--><filter><filter-name>encoding</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></filter><filter-mapping><filter-name>encoding</filter-name><url-pattern>/</url-pattern></filter-mapping>
</web-app>
  • 编写Spring配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttps://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 自动扫描指定的包,下面所有注解类交给IOC容器管理 --><context:component-scan base-package="com.zyh.controller"/><!-- 视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"id="internalResourceViewResolver"><!-- 前缀 --><property name="prefix" value="/WEB-INF/jsp/"/><!-- 后缀 --><property name="suffix" value=".jsp"/></bean></beans>

编写Controller

package com.zyh.controller;import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zyh.pojo.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserController {@RequestMapping(value = "/t1")
//    @ResponseBody //不会再经过视图解析器的拼接,而是直接返回一个字符串public String test1()  {ObjectMapper objectMapper = new ObjectMapper();User user = new User("小陈", 18, "女");String str = null;try {str = objectMapper.writeValueAsString(user);} catch (JsonProcessingException e) {e.printStackTrace();}return str;}
}

测试:

我们发现数据被显示在前端页面上,但确实乱码的。

处理JSON传输数据的乱码问题

方式1、 直接在@RequestMapping(value = "/t1")指定响应返回体和编码

@RequestMapping(value = "/t1",produces = "application/json;charset=utf-8")

测试:

方式2、 在Spring配置文件中统一处理

   <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="false"/></bean></property></bean></mvc:message-converters></mvc:annotation-driven>

测试:

测试集合的输出
    @RequestMapping("/t2")public String test2() throws JsonProcessingException {ObjectMapper objectMapper = new ObjectMapper();List<User> userList = new ArrayList<User>();User user1 = new User("小王1",19,"男");User user2 = new User("小王2",20,"男");User user3 = new User("小王3",21,"男");User user4 = new User("小王4",22,"男");User user5 = new User("小王5",23,"男");userList.add(user1);userList.add(user2);userList.add(user3);userList.add(user4);userList.add(user5);String str = objectMapper.writeValueAsString(userList);return str;}

测试Date输出
    @RequestMapping("/t3")public String test3() throws JsonProcessingException {ObjectMapper mapper = new ObjectMapper();SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");String format = dateFormat.format(new Date());return mapper.writeValueAsString(format);}


使用ObjectMapper自定义时间戳格式:

    @RequestMapping("/t3")public String test3() throws JsonProcessingException {ObjectMapper mapper = new ObjectMapper();mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");mapper.setDateFormat(dateFormat);return mapper.writeValueAsString(new Date());}

测试:

将ObjectMapper抽取成工具类:
package com.zyh.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, String dateFormat) {ObjectMapper mapper = new ObjectMapper();mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");mapper.setDateFormat(format);try {return mapper.writeValueAsString(object);} catch (JsonProcessingException e) {e.printStackTrace();}return null;}public static String getJson(Object object) {return getJson(object,"YYYY-MM-dd HH:mm:ss");}
}

使用工具类传递JSON: 不用每次去创建ObjectMapper对象,直接使用工具类即可。

package com.zyh.controller;import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zyh.pojo.User;
import com.zyh.utils.JsonUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;
import java.util.Date;
import java.util.List;@RestController
public class UserController {@RequestMapping(value = "/t1")
//  @ResponseBody //不会再经过视图解析器的拼接,而是直接返回一个字符串public String test1() throws JsonProcessingException {User user = new User("小陈", 18, "女");return JsonUtils.getJson(user);}@RequestMapping("/t2")public String test2() throws JsonProcessingException {List<User> userList = new ArrayList<User>();User user1 = new User("小王1", 19, "男");User user2 = new User("小王2", 20, "男");User user3 = new User("小王3", 21, "男");User user4 = new User("小王4", 22, "男");User user5 = new User("小王5", 23, "男");userList.add(user1);userList.add(user2);userList.add(user3);userList.add(user4);userList.add(user5);return JsonUtils.getJson(userList);}@RequestMapping("/t3")public String test3() throws JsonProcessingException {return JsonUtils.getJson(new Date());}
}

三、FastJson

1、简介
​ FastJson.jar是阿里开发的一款专门用于Java开发的包,可以方便的实现json对象与JavaBean对象的转换,实现JavaBean对象与json字符串的转换,实现json对象与json字符串的转换。实现json的转换方法很多,最后的实现结果都是一样的。
2、使用FastJson

步骤:

  • 导入FastJson的依赖
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.62</version>
</dependency>
  • 编写Controller,测试FastJson
package com.zyh.controller;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zyh.pojo.User;
import com.zyh.utils.JsonUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;
import java.util.Date;
import java.util.List;@RestController
public class UserController {//使用JSON@RequestMapping("/t4")public String test4() {List<User> users = new ArrayList<User>();User user1 = new User("小王1", 19, "男");User user2 = new User("小王2", 20, "男");User user3 = new User("小王3", 21, "男");User user4 = new User("小王4", 22, "男");User user5 = new User("小王5", 23, "男");users.add(user1);users.add(user2);users.add(user3);users.add(user4);users.add(user5);System.out.println("--------------Java对象转JSON字符串------------");String str = JSON.toJSONString(users);System.out.println(str);System.out.println("--------------JSON字符串转Java对象------------");List list = JSON.parseObject(str, List.class);System.out.println(list);System.out.println("--------------Java对象转JSON对象------------");JSONObject json = (JSONObject) JSON.toJSON(user1);System.out.println(json);System.out.println("--------------Java对象转JSON字符串------------");User user = JSON.toJavaObject(json, User.class);System.out.println(user);return str;}
}

结果:


JSON完结

SpringMVC学习(七)使用JSON传递数据、jackson和fastjson的使用、处理JSON传输的乱码问题相关推荐

  1. mvc json 乱码_你了解JSON吗?——Jackson、FastJson在SpringMVC中的简单使用

    原文参考分享自CSDN:你了解JSON吗?--Jackson.FastJson在SpringMVC中的简单使用_欢迎来到 Baret~H 的博客-CSDN博客 1. 什么是 JSON JSON(Jav ...

  2. (转)SpringMVC学习(七)——Controller类的方法返回值

    http://blog.csdn.net/yerenyuan_pku/article/details/72511844 本文所有案例代码的编写均建立在前文SpringMVC学习(六)--SpringM ...

  3. ASP.NET MVC 5 学习教程:控制器传递数据给视图

    起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 通过控制器访问模型的数据 生成的代码详解 使用 SQL Se ...

  4. JSP使用JSON传递数据,注意避免中文乱码

    JSP传递数据时不方便使用Java中的对象类型,一般使用JSON来传递对象. 在使用JSON时,前端js如下,注意指定dataType: var htmlobj= $.ajax({ url:" ...

  5. jQuery下如何使用Json传递数据

    json的结构为: {\"data\":[{\"key1\":\"1\"},{\"key2\":\"2\&qu ...

  6. Android学习之利用Intent传递数据

    你能通过这篇文章学习到什么? 1. 利用intent在两个activity之间传递数据 2. 利用intent在两个activity之间传递数据包 3. 利用intent获取到返回数据 很多人在刚开始 ...

  7. 前端传JSON格式数据给后端,将数据封装成JSON格式(@RequestBody注解)

    在前端开发过程中,碰到了后端要求前端提供JSON格式数据 如图所示,后端使用了@RequestBody注解. @RequestBody的作用其实是将json格式的数据转为java对象 因此需要我们前端 ...

  8. SpringMVC:学习笔记(4)——处理模型数据

    SpringMVC-处理模型数据 说明 SpringMVC 提供了以下几种途径输出模型数据: – ModelAndView: 处理方法返回值类型为 ModelAndView时, 方法体即可通过该对象添 ...

  9. [转载] JavaScrip ajaxt和python flask通过json传递数据的方法

    参考链接: python json 9: request向服务端发送json数据 JavaScript调用ajax发送一个json $('#cc').click(function () { mdffi ...

  10. 解决前端传的数据是下划线命名而后端是驼峰命名的Json传递数据的问题

    由于之前个人开发项目都是统一命名,不会出现这种问题,但是到公司实习前后端分离前端是下划线命名,而后端是驼峰命名,所以导致数据的传递需要转换 @JsonProperty("user_id&qu ...

最新文章

  1. Win7下JDK环境变量设置批处理(转)
  2. python自学流程-Python系统学习流程图,教你一步步学习python
  3. python上机报告出现的问题和解决方法_关于发现存在问题及解决方法的报告
  4. 「新房+电商+大数据」如何塑造满意度达 99.8% 的万亿市场领路人?
  5. Scala 类和对象详解
  6. git reset git stash
  7. Oracle中NUMBER类型如果不指定长度和小数点精度默认是多长
  8. nodejs操作mongodb增删改查
  9. sql注入攻击和PreparedStatement有效防止sql注入攻击
  10. 如何在xp中添加打印机
  11. 获取系统当前时间(多语言版)
  12. 转:性能测试常见术语
  13. 翻译:您在Swift 5中的第一个UITest
  14. java重载父类方法_子类重载父类方法
  15. 根据CTP接口计算现手、增仓、开平、对手盘 (2)
  16. php视图编辑,word中最适合查看编辑排版效果的视图是什么
  17. 微信小程序打印实时日志
  18. 紧急通知!限招100人:免费培训海外抖音TikTok视频搬运赚钱技能,0基础轻松月入2万+!...
  19. 多任务学习(Multi-Task Learning)
  20. Apache commons lang简介

热门文章

  1. B VUE系列 三:vuex,vue全局变量管理和状态更新的利器
  2. 设置Emeditor为Python的简易开发工具
  3. 消息队列一:为什么需要消息队列(MQ)?
  4. 安装debian 9.1后,中文环境下将home目录下文件夹改为对应的英文
  5. 【作业报告】作业5 四则运算 测试与封装 5.1
  6. AndroidManifest.xml 中application 的 android:name 属性作用
  7. 你的第一个 iOS 应用程序: 100% 的编程方式
  8. 使用PhoneNumberValidator判断用户输入的电话格式,并用PhoneFormatter对电话号码格式化。...
  9. html支持图片文字的控件_[小工具][爬虫]一键完整备份你的Csdn博客文章(支持Markdown,HTML,文中图片)...
  10. 拓端tecdat|R语言向量自回归模型(VAR)及其实现