springmvc05-json交互处理
什么是json:
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,目前使用特别广泛。
*采用完全独立于编程语言的文本格式来存储和表示数据。
*简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。
*易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
在 JavaScript 语言中,一切都是对象。因此,任何JavaScript 支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。看看他的要求和语法格式:
*对象表示为键值对,数据由逗号分隔
*花括号保存对象
*方括号保存数组
JSON 键值对是用来保存 JavaScript 对象的一种方式,和 JavaScript 对象的写法也大同小异,键/值对组合中的键名写在前面并用双引号 "" 包裹,使用冒号 : 分隔,然后紧接着值:

很多人搞不清楚json和javascriot对象的关系,其实可以这么理解:
json是javascriot对象的字符串表示法,他使用文本表示一个JS对象的信息,本质是一个字符串

JSON 和 JavaScript 对象互转
要实现json字符串转换为javascript对象,可以用json.parse()方法

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

代码测试
在web目录下新建一个 json-1.html , 编写测试内容

在IDEA中使用浏览器打开,查看控制台输出!

可以看到,我们将js对象转化为json对象时,键值对的属性值已经变为了纯文本格式,而我们用json.parse()方法时,将json对象又转化为js对象,大家在平时中一定要灵活应用。
Controller返回JSON数据
Jackson是目前比较好的json解析工具了
当然工具不止这一个,比如还有阿里巴巴的 fastjson 等等。
我们这里使用Jackson,使用它需要导入它的jar包;

配置SpringMVC需要的配置
1)web.xml

springmvc-servlet.xml

我们随便编写一个User的实体类,然后我们去编写我们的测试Controller;

这里我们需要两个新东西,一个是@ResponseBody,一个是ObjectMapper对象,我们看下具体的用法
编写一个Controller;

配置tommcat,测试一下
http://localhost:8080/json1

可以看到乱码了,我们需要设置一下它的编码格式为utf-8
可以通过@requestMapping的produces属性来实现,修改下列代码

当然啦,这种方法比较麻烦,如果项目中有许多请求那么每一种方法都要添加,所以我们可以通过spring配置统一指定,这样就不用每次都去处理了,
我们可以在springmvc的配置文件上添加一段消息StringHttpMessageConverter转换配置!

我们也可以在类上直接使用 @RestController ,这样子,里面所有的方法都只会返回 json 字符串了,不用再每一个都添加@ResponseBody !
我们在前后端分离开发中,一般都使用 @RestController ,十分便捷!

启动tomcat测试,结果都正常输出!
测试集合输出
增加一个新的方法
@RequestMapping("/j2")
public String json2() throws JsonProcessingException {
//创建一个jackson的对象映射器,用来解析数据
ObjectMapper mapper = new ObjectMapper();
//创建一个对象
User user1 = new User("心心1号", 3, "女");
User user2 = new User("心心2号", 3, "女");
User user3 = new User("心心3号", 3, "女");
User user4 = new User("心心4号", 3, "女");
List<User> list = new ArrayList<User>();
list.add(user1);
list.add(user2);
list.add(user3);
list.add(user4);
//将我们的对象解析成为json格式
String str = mapper.writeValueAsString(list);
return str;
}
运行结果 : 十分完美,没有任何问题!

下面我们来看看输出时间对象,输出时间对象我认为非常有意思
增加一个新的方法

运行结果:

jackson会默认把时间转成timestamps形式,我在上面使用了自定义日期格式,,这样看起来就更加直观享受
因为如果要经常使用的话,是比较麻烦的,所以我们将这些代码封装到一个工具类中,

这样我们使用工具类就特别方便快捷

以上就是Json的基本用法,我们在平时中要熟练掌握,因为它在我们的数据传输中特别重要!
springmvc05-json交互处理的更多相关文章
- SpringMVC-05 Json交互处理
SpringMVC-05 Json交互处理 Json 1.什么是JSON? JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,目前使用特别 ...
- SpringMVC详解(六)------与json交互
Json(JavaScript Object Notation),它是一种轻量级数据交换格式,格式简单,易于读写,目前使用特别广泛.那么这篇博客我们主要谈谈在 SpringMVC 中,如何对 json ...
- SpringMVC框架五:图片上传与JSON交互
在正式图片上传之前,先处理一个细节问题: 每一次发布项目,Tomcat都会重新解压war包,之前上传过的图片会丢失 为了解决这个问题:可以不在Tomcat下保存图片,而是另找一个目录. 上传图片: & ...
- 项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷!
前言 系列文章:[传送门] 洗了个澡,准备写篇博客.然后看书了.时间 3 7 分.我慢慢规律生活,向目标靠近. 很喜欢珍惜时间像叮当猫一样 正文 慢慢地,二维码实现签到将要落幕了.下篇文章出二维码实 ...
- springMVC的高级数据绑定,以及json交互,全局异常配置,
一.窄化请求映射 1.在class上添加@RequestMapping(url)指定通用请求前缀, 限制此类下的所有方法请求url必须以请求前缀开头,通过此方法对url进行分类管理. 如下: @Con ...
- SpringMVC之JSON交互
#什么是json? json是一种用于储存数据格式,是js脚本语言的子集. #json的作用? 它可以传递对象.数组等数据结构.如果是单个数据,则要用数组,不用对象,因为对象都是键值对的 方式去存储, ...
- springmvc实现json交互 -requestBody和responseBody
json数据交互 1.为什么要进行json数据交互 json数据格式在接口调用中.html页面中较常用,json格式比较简单,解析还比较方便. 比如:webservice接口,传输json数据. 2. ...
- Ajax json交互和SpringMVC中@RequestBody
Ajax json交互和SpringMVC中@RequestBody 标签: 背景 自己提供出去得接口中参数设置为@RequestBody VipPromotionLog vipPromotionLo ...
- android通过HttpClient与服务器JSON交互
通过昨天对HttpClient的学习,今天封装了HttpClient类 代码如下: package com.tp.soft.util; import java.io.BufferedReader; i ...
- JAVAEE——SpringMVC第二天:高级参数绑定、@RequestMapping、方法返回值、异常处理、图片上传、Json交互、实现RESTful、拦截器
1. 课前回顾 https://www.cnblogs.com/xieyupeng/p/9093661.html 2. 课程计划 1.高级参数绑定 a) 数组类型的参数绑定 b) List类型的绑定 ...
随机推荐
- 洛谷P1049 [NOIP2001 普及组] 装箱问题
本题就是一个简单的01背包问题 1.因为每个物品只能选一次,而且要使箱子的剩余空间为最小.所以可以确定属性为 MAX 2.由于是从n个物品里面选i个物品 那么就是选出的i个物品的空间总和要尽可能的 ...
- CRI容器运行时
CRI容器运行时 我们知道 Kubernetes 提供了一个 CRI 的容器运行时接口,那么这个 CRI 到底是什么呢?这个其实也和 Docker 的发展密切相关的. 在 Kubernetes 早期的 ...
- SpringBoot 多环境配置文件切换
背景 很多时候,我们项目在开发环境和生成环境的环境配置是不一样的,例如,数据库配置,在开发的时候,我们一般用测试数据库,而在生产环境的时候,我们是用正式的数据,这时候,我们可以利用profile在不同 ...
- 同一套代码部署多个实例来并行完成mysql某项任务,且避免重复执行
我经常会碰到一些耗时较长的任务,譬如更新5千万条表数据中的某个字段,代码中可以通过分页依次读取db,然后更新即可.但是耗时极长,那么能否通过将代码部署多个实例,譬如启动多个docker来并行执行任务, ...
- @SpringBootApplication注释在内部有什么用处?
作为Spring引导文档,@SpringBootApplication注释等同于同时使用@Configuration.@EnableAutoConfiguration和@ComponentScan及其 ...
- SpringBoot和SpringCloud的区别?
SpringBoot专注于快速方便的开发单个个体微服务. SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来, 为各个微服务之间提供 ...
- springboot使用@Value注入properties文件中的值,中文乱码
最近开发一个需求,讲一个中文值配置在properties文件中,然后代码中使用@Value注解进行注入使用,然而出现了如下状况: 中文出现乱码,将代码修改如下: String str = new St ...
- SpringDataRedis持续更新部分值使用方式
官方文档:https://docs.spring.io/spring-data/redis/docs/2.3.4.RELEASE/reference/html/#redis.repositories. ...
- Java 中的 final 关键字有哪些用法?
修饰类:表示该类不能被继承: 修饰方法:表示方法不能被重写: 修饰变量:表示变量只能一次赋值以后值不能被修改(常量).
- synchronize、Lock、ReenTrantLock 的区别
synchronize 和Lock: 1.synchronize 系java 内置关键字:而Lock 是一个类 2.synchronize 可以作用于变量.方法.代码块:而Lock 是显式地指定开始和 ...