[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来代替@ControllerRestController只返回字符串。

如果类写@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);
}