[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"}]

<!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来代替@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);
}
上一篇:企业信用评级等级是如何划分的?


下一篇:推荐一个查询基金宏观数据