在Web1.0时代 页面输错一个,全部都要重新输入
在Wen2.0时代 Ajax横空出世
JSON
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
在JS语言中,一切都是对象.因此任何类型都可以通过JSON来表示
格式:
对象表示为键值对
数据由逗号分隔
花括号保存对象
方括号保存数组
{"name":"haxi"}
{"age":"18"}
{"sex":"男"}
事实上,JSON是JS的字符串表示法,它使用文本表示一个JS对象的信息,本质是一个字符串
在此Web应用时代,尤其是前后端分离项目,JSON就是王者
pom.xml依赖
org.springframework
spring-webmvc
5.0.2.RELEASE
org.springframework
spring-web
5.0.2.RELEASE
com.fasterxml.jackson.core
jackson-databind
2.9.9
web.xml
DispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc.xml
1
DispatcherServlet
/
springmvc.xml
User.java
package cn.icanci.pojo;
/**
* @Author: icanci
* @ProjectName: json
* @PackageName: cn.icanci.pojo
* @Date: Created in 2020/2/21 21:53
* @ClassAction:
*/
public class User {
private String name;
private int age;
private String sex;
public User() {
}
public User(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
}
UserController.java
package cn.icanci.contorller;
import cn.icanci.pojo.User;
import cn.icanci.utils.JsonUtils;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @Author: icanci
* @ProjectName: json
* @PackageName: cn.icanci.contorller
* @Date: Created in 2020/2/21 21:53
* @ClassAction:
*/
@Controller
public class UserController {
@RequestMapping("/json1")
@ResponseBody
public String json1() throws Exception {
//思考 正常返回是返回视图解析器 而JSON需要返回一个字符串
//有很多第三方jar包.可以实现这个功能 比如 jackson 只需要一个简单的注解就可以实现了
// @ResponseBody,将服务器返回的对象转换为json对象
//@RequestBody
//需要一个jackson对象的映射器 就是一个类 可以直接将对象转换为json对象
ObjectMapper objectMapper = new ObjectMapper();
//创建一个对象
User user = new User("hahah", 12, "女");
//将java对象转换为json
String string = objectMapper.writeValueAsString(user);
System.out.println(string);
//由于使用了 @ResponseBody,这里会返回json格式的字符串
return string;
}
//发现问题 中文乱码 需要给 @RequestMapper添加注解的一个属性
@RequestMapping(value = "/json2",produces ="application/json;charset=utf-8")
@ResponseBody
public String json2() throws Exception {
//需要一个jackson对象的映射器 就是一个类 可以直接将对象转换为json对象
ObjectMapper objectMapper = new ObjectMapper();
//创建一个对象
User user = new User("嘻嘻嘻", 12, "女");
//由于使用了 @ResponseBody,这里会返回json格式的字符串
return objectMapper.writeValueAsString(user);
}
@RequestMapping(value = "/json3")
@ResponseBody
public String json3() throws Exception {
//需要一个jackson对象的映射器 就是一个类 可以直接将对象转换为json对象
ObjectMapper objectMapper = new ObjectMapper();
//创建一个对象
User user = new User("嘻嘻嘻", 12, "女");
List list = new ArrayList<>();
list.add(user);
list.add(user);
list.add(user);
list.add(user);
list.add(user);
//由于使用了 @ResponseBody,这里会返回json格式的字符串
return objectMapper.writeValueAsString(list);
}
@RequestMapping(value = "/json4")
@ResponseBody
public String json4() throws Exception {
Date date = new Date();
System.out.println(date);
//发现问题 返回的是时间戳 Timestamp
return new ObjectMapper().writeValueAsString(date);
}
@RequestMapping(value = "/json5")
@ResponseBody
public String json5() throws Exception {
//发现问题 返回的是时间戳 Timestamp
//如何不返回时间戳 关闭时间功能
//时间格式话问题
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS,false);
//自定义时间日期格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
objectMapper.setDateFormat(sdf);
return new ObjectMapper().writeValueAsString(new Date());
}
//发现问题 重复代码太多 需要重构 JsonUtils
@RequestMapping(value = "/json6")
@ResponseBody
public String json6() throws Exception {
Date date = new Date();
return JsonUtils.getDateJson(date);
}
}
封装的工具类 JsonUtils.java
package cn.icanci.utils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.springframework.http.converter.StringHttpMessageConverter;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @Author: icanci
* @ProjectName: json
* @PackageName: cn.icanci.utils
* @Date: Created in 2020/2/21 22:41
* @ClassAction: JSON工具类
*/
public class JsonUtils {
public static String getDateJson(Object obj){
return getDateJson(obj,"yyyy-MM-dd HH:mm:ss");
}
public static String getDateJson(Object obj,String dateFormat){
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS,false);
//自定义时间日期格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
objectMapper.setDateFormat(sdf);
try {
return new ObjectMapper().writeValueAsString(new Date());
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return null;
}
}
放在最后 这里是不变的 以后需要直接拿来用就可以了