一,认识json( JavaScript Object Notation:js对象标记 )
(1) 采用完全独立的编程语言的文本格式来存储和表示数据
(2) 容易阅读 同时也容易让机器解析和生成,有效的提高了网络的传输效率
(3) 任何JavaScript支持的类型都可以通过接送来传输,对象表示为键值对,数据 直接由逗号分隔,花括号存储对象 ,中括号存储数组
二,jackson的使用
0.吧基本mvc环境搭建好
1.要使用jackson就要导入依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.1</version>
</dependency>
2.配置解决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="false"/>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
3,编写controllo文件创建 ObjectMapper 对象
注意:使用 @ResponseBody注解要 配合 @Controller注解一起使用
RestController 和 ResponesBody 的作用一致
//@Controller//走试图解析器
@RestController //标记了下面之会返回字符串
public class SpringmvcJson {
@RequestMapping("/s/j1")
//@ResponseBody //就不会走视图解析器,直接返回一个字符串 配合Controller标签一起使用的
public String json1() throws JsonProcessingException {
final ObjectMapper om = new ObjectMapper();
User user = new User("张三",1,200);
// 把他转换成json格式
String j=om.writeValueAsString(user);
return j;
}
三,玩法
1,可以测试date , 数组 ,和对象的表示形式
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.kuang.pojo.User;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
//@Controller//走试图解析器
@RestController //标记了下面之会返回字符串
public class SpringmvcJson {
@RequestMapping("/s/j1")
//@ResponseBody //就不会走视图解析器,直接返回一个字符串 配合Controller标签一起使用的
public String json1() throws JsonProcessingException {
final ObjectMapper om = new ObjectMapper();
User user = new User("张三",1,200);
String j=om.writeValueAsString(user);
return j;
}
/**
* json 打印数组样式
* @return
* @throws JsonProcessingException
*/
@RequestMapping("/s/j2")
public String json2() throws JsonProcessingException {
final ObjectMapper om = new ObjectMapper();
ArrayList<User> userArrayList = new ArrayList<User>();
User user1= new User("张三1",1,200);
User user2= new User("张三2",1,200);
User user3= new User("张三3",1,200);
User user4= new User("张三4",1,200);
userArrayList.add(user1);
userArrayList.add(user2);
userArrayList.add(user3);
userArrayList.add(user4);
String j=om.writeValueAsString(userArrayList);
return j;
}
// 方法一
/**
* json 输出date格式
* 思路
* 在原来的基础上直接设置
* 返回的对象产生变化
*/
@RequestMapping("/s/j3")
public String json3() throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return mapper.writeValueAsString(sdf.format(date));
}
// 方法二
/**
* 思路
* 吧原来的格式关闭 在设置一个
* 好处 返回的对象依旧是Date
*/
@RequestMapping("/s/j4")
public String json4() throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
// 意思就是吧原本的 时间差 关闭了
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
mapper.setDateFormat(sdf);
Date date = new Date();
return mapper.writeValueAsString(date);
}
date的进阶玩法
第一步 :吧上面的代码独立写成一个工具类
package com.kuang.utlis;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import java.text.SimpleDateFormat;
import java.util.Date;
public class JsonUtlis {
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);
Date date = new Date();
try {
return mapper.writeValueAsString(date);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return null;
}
}
第二步,直接调用刚刚写的工具类即可
/**
* 进阶版 自己写一个工具包 来提高代码的复用性
* @return
* @throws JsonProcessingException
*/
@GetMapping("/j5")
public String json5(){
Date date = new Date();
return new JsonUtlis().getJson(date);
}