SpringMVC 03
1. JSON格式
后端留接口传数据 --- json格式 ---- 前端独立部署渲染数据
JSON:JavaScript Object Notation,js对象标记, 是一种轻量级的数据交换格式,
采用完全独立于编程语言的文本格式存储和表示数据, 有效提升网络传输效率
是JS对象的字符串表示,本质是一个字符串
语法格式:
- 对象表示为键值对,数据用逗号分隔
- 花括号保存对象
- 方括号保存数组
eg:单个对象{"id":1,"age":3,"name":"roy"}
,
集合对象: [{"id":1,"age":3,"name":"roy"}, {"id":1,"age":3,"name":"roy"}]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
var user = {
name : "Roy",
age:3,
sex:"boy"
}
var userString = JSON.stringify(user);//把一个js对象转换成JSON格式
console.log(userString);
console.log(“============”);
var userAgain = JSON.parse(userString);//把一个JSON字符串转换成前端对象
console.log(userAgain);
</script>
</head>
<body>
</body>
</html>
2. JSON解析
(使用包:Jackson或谷歌的gson)
作用: 把对象解析为json格式传送给前端
1. 直接返回字符串
写user(id, age, name)实体类,并写controller:
@ResponseBody 注解表示直接返回字符串内容,而不经过视图解析器
@Controller
public class UserController {
@RequestMapping("/t1")
@ResponseBody
public String json1(){
User user = new User(1, 3, "roy");
return user.toString();
}
}
2. Jackson返回json字符串&乱码
如果是后添加的webapp支持,记得更新lib依赖包
@Controller
public class UserController {
@RequestMapping("/t1")
@ResponseBody
public String json_test() throws JsonProcessingException {
User user = new User(1, 3, "roy");
ObjectMapper objectMapper = new ObjectMapper();//new 一个ObjectMapper
String str = objectMapper.writeValueAsString(user);//调用writeValueAsString(对象)
return str;
}
}
返回为:{"id":1,"age":3,"name":"roy"}
乱码问题: 要么走filter, 要么@RequestMapping写:
@RequestMapping(value="/t1", produces = "application/json;charset=utf-8")
后者在springmvc-servlet.xml中配置:
<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.Jackson20bjectMapperFactoryBean">
<property name="failOnEmptyBeans" value="false"/>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
如果是前后端分离,一般都返回json字符串,而不经过视图解析器;所以在Controller类前面直接定义:
@RestController
来代替@Controller
, RestController
只返回字符串。
即:
如果类写@Controller
, 下面的方法如果要不走视图解析器,方法要注解@ResponseBody
;
如果类写@RestController
, 则下面的方法都只返回字符串,
方法上的@RequestMapping("/路径")
是用来指定访问的
3. 返回时间
方式一:java中用传统方式设置显示:
@RequestMapping(value="/t2")
@ResponseBody
public String json2() throws JsonProcessingException {
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return simpleDateFormat.format(date);
}
方式二:使用jackson的方式
@RequestMapping(value="/t2")
@ResponseBody
public String json2() throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);//设置不走时间戳
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
objectMapper.setDateFormat(simpleDateFormat);//设置objectMapper的格式
Date date = new Date();
return objectMapper.writeValueAsString(date);
}