SpringMVC学习(七)使用JSON传递数据、jackson和fastjson的使用、处理JSON传输的乱码问题
一、JSON简介
1、什么是JSON?
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,目前使用较为广泛。
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 字符串和JavaScript的转换
JSON转JS对象:JSON.parse()方法
JS对象转JSON:JSON.stringify()方法
//将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传输的乱码问题相关推荐
- mvc json 乱码_你了解JSON吗?——Jackson、FastJson在SpringMVC中的简单使用
原文参考分享自CSDN:你了解JSON吗?--Jackson.FastJson在SpringMVC中的简单使用_欢迎来到 Baret~H 的博客-CSDN博客 1. 什么是 JSON JSON(Jav ...
- (转)SpringMVC学习(七)——Controller类的方法返回值
http://blog.csdn.net/yerenyuan_pku/article/details/72511844 本文所有案例代码的编写均建立在前文SpringMVC学习(六)--SpringM ...
- ASP.NET MVC 5 学习教程:控制器传递数据给视图
起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 通过控制器访问模型的数据 生成的代码详解 使用 SQL Se ...
- JSP使用JSON传递数据,注意避免中文乱码
JSP传递数据时不方便使用Java中的对象类型,一般使用JSON来传递对象. 在使用JSON时,前端js如下,注意指定dataType: var htmlobj= $.ajax({ url:" ...
- jQuery下如何使用Json传递数据
json的结构为: {\"data\":[{\"key1\":\"1\"},{\"key2\":\"2\&qu ...
- Android学习之利用Intent传递数据
你能通过这篇文章学习到什么? 1. 利用intent在两个activity之间传递数据 2. 利用intent在两个activity之间传递数据包 3. 利用intent获取到返回数据 很多人在刚开始 ...
- 前端传JSON格式数据给后端,将数据封装成JSON格式(@RequestBody注解)
在前端开发过程中,碰到了后端要求前端提供JSON格式数据 如图所示,后端使用了@RequestBody注解. @RequestBody的作用其实是将json格式的数据转为java对象 因此需要我们前端 ...
- SpringMVC:学习笔记(4)——处理模型数据
SpringMVC-处理模型数据 说明 SpringMVC 提供了以下几种途径输出模型数据: – ModelAndView: 处理方法返回值类型为 ModelAndView时, 方法体即可通过该对象添 ...
- [转载] JavaScrip ajaxt和python flask通过json传递数据的方法
参考链接: python json 9: request向服务端发送json数据 JavaScript调用ajax发送一个json $('#cc').click(function () { mdffi ...
- 解决前端传的数据是下划线命名而后端是驼峰命名的Json传递数据的问题
由于之前个人开发项目都是统一命名,不会出现这种问题,但是到公司实习前后端分离前端是下划线命名,而后端是驼峰命名,所以导致数据的传递需要转换 @JsonProperty("user_id&qu ...
最新文章
- Win7下JDK环境变量设置批处理(转)
- python自学流程-Python系统学习流程图,教你一步步学习python
- python上机报告出现的问题和解决方法_关于发现存在问题及解决方法的报告
- 「新房+电商+大数据」如何塑造满意度达 99.8% 的万亿市场领路人?
- Scala 类和对象详解
- git reset git stash
- Oracle中NUMBER类型如果不指定长度和小数点精度默认是多长
- nodejs操作mongodb增删改查
- sql注入攻击和PreparedStatement有效防止sql注入攻击
- 如何在xp中添加打印机
- 获取系统当前时间(多语言版)
- 转:性能测试常见术语
- 翻译:您在Swift 5中的第一个UITest
- java重载父类方法_子类重载父类方法
- 根据CTP接口计算现手、增仓、开平、对手盘 (2)
- php视图编辑,word中最适合查看编辑排版效果的视图是什么
- 微信小程序打印实时日志
- 紧急通知!限招100人:免费培训海外抖音TikTok视频搬运赚钱技能,0基础轻松月入2万+!...
- 多任务学习(Multi-Task Learning)
- Apache commons lang简介
热门文章
- B VUE系列 三:vuex,vue全局变量管理和状态更新的利器
- 设置Emeditor为Python的简易开发工具
- 消息队列一:为什么需要消息队列(MQ)?
- 安装debian 9.1后,中文环境下将home目录下文件夹改为对应的英文
- 【作业报告】作业5 四则运算 测试与封装 5.1
- AndroidManifest.xml 中application 的 android:name 属性作用
- 你的第一个 iOS 应用程序: 100% 的编程方式
- 使用PhoneNumberValidator判断用户输入的电话格式,并用PhoneFormatter对电话号码格式化。...
- html支持图片文字的控件_[小工具][爬虫]一键完整备份你的Csdn博客文章(支持Markdown,HTML,文中图片)...
- 拓端tecdat|R语言向量自回归模型(VAR)及其实现