文章目录
JSON
一、什么是JSON
前后端分离时代的产物
后端部署后端,提供接口,提供数据
json(数据交换格式)
前端独立部署,负责渲染后端的数据
是一种轻量级的数据交换的格式,独立与编程语言的纯文本格式,是一个字符串,简洁清晰的层次,易于人编写和解读,易于解析和生成,提升传输效率
1、创建一个js对象
// 编写一个javaScript对象
var user = {
name: "刘锋",
age: 20,
sex: "男"
};
console.log(user);
2、将js对象转换为json对象
// 将js对象转换为json对象
var json = JSON.stringify(user);
console.log(json);
3、将json对象转换成js对象
var obj = JSON.parse(json);
console.log(obj);
test.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
// 编写一个javaScript对象
var user = {
name: "刘锋",
age: 20,
sex: "男"
};
console.log(user);
// 将js对象转换为json对象
var json = JSON.stringify(user);
console.log(json);
// 将json对象转换成js对象
var obj = JSON.parse(json);
console.log(obj);
</script>
</head>
<body>
</body>
</html>
二、Controller返回JSON数据
Jackson
是一个很好的json解析工具
当然还有其他的工具,比如阿里巴巴的fastjson
这里我们使用的是Jackson,先导入maven的依赖jar包
1、导入maven
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.3</version>
</dependency>
2、配置SpringMVC
<?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">
<!--配置dispatchServlet-->
<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>
<!--spring配置的乱码过滤器-->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encode</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>
3、springmvc-servlet.xml
<?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/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="com.itlf.controller"/>
<!--资源过滤-->
<mvc:default-servlet-handler/>
<mvc:annotation-driven/>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
<!--<bean name="/controllerTest01" class="com.itlf.controller.ControllerTest01"/>-->
</beans>
4、Controller
@Controller
public class UserController {
@ResponseBody // 加了这个注解就不会走视图解析器,就直接会返回一个字符串
@RequestMapping("/j1")
public String json1() throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
// 创建一个对象
User user = new User("刘锋1号",20,"男");
String string = mapper.writeValueAsString(user);
return string;
}
}
中文乱码问题:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pt3hXgT1-1623063694210)(C:\Users\刘锋\AppData\Roaming\Typora\typora-user-images\image-20210606203823139.png)]
在springmvc-servlet.xml配置文件里面
<!--json乱码配置-->
<mvc:annotation-driven>
<mvc:message-converters>
<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>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aNjaZ2nU-1623063694215)(C:\Users\刘锋\AppData\Roaming\Typora\typora-user-images\image-20210606204645534.png)]
日期格式的转换
@ResponseBody // 加了这个注解就不会走视图解析器,就直接会返回一个字符串
@RequestMapping("/j3")
public String json3() throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
// 创建一个日期对象
Date date = new Date();
// 自定义日期的格式(java)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
// 使用ObjectMapper
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
mapper.setDateFormat(sdf);
String string = mapper.writeValueAsString(date);
return string;
}
三、Fastjson的使用
1、先引入依赖
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
2、内置的常用的方法
// java对象转换json字符串
String toJSONString = JSON.toJSONString(userList);
// json字符串转换java对象
JSONObject parseObject = JSON.parseObject(toJSONString);
// java对象转换json对象
JSONObject toJSON = (JSONObject) JSON.toJSON(user1);
// json对象转换Java对象
Object toJavaObject = JSON.toJavaObject(toJSON, User.class);
出现的问题
解决办法: