[SpringMVC 03] json
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"}]
Title
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中配置:
如果是前后端分离,一般都返回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);
}