JSON
JSON,全称是 JavaScript Object Notation,即 JavaScript对象标记法。
JSON是一种轻量级、基于文本的、可读的格式。
JSON是参考JavaScript 对象的规则定义的,其语法与JavaScript定义对象的语法几乎完全相同。
JSON是前后端交互的一种格式信息。
一、结合SpringMVC使用jackson与前端交互
1.添加web框架支持,和创建lib目录防止资源导出失败
保证配置好了前端控制器,以及spring管理的配置文件。这些都是约定大于配置。
2.导包jackson
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.3</version>
</dependency>
</dependencies>
3.使用jackson结合处理器映射器返回json
通常情况下,我们可以用@ResponseBody注解,只返回一个字符串结果到页面上。
@Controller
public class UserController {
@GetMapping("/h1")
@ResponseBody//结合Mapping映射器使用,不走视图解析器,不再返回视图,而是返回一个字符串。
public String test(){
User user = new User("kxy", 19, "男");
return user.toString();
}
}
而它只是个对象形式的字符串。而我们需要做的是,把他变成json字符串。
@Controller
public class UserController {
@RequestMapping("/h1")
@ResponseBody
public String test() throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
User user = new User("kxy", 19, "男");
String json = mapper.writeValueAsString(user);
return json;
}
}
jackson包下的ObjectMapper的mapper对象,它的writeValueAsString方法可以把一个对象转成json字符串。这只是使用对象转json的常用方法之一。
此外我们还需要解决返回json到前端产生的乱码问题:
<!-- 解决返回json到前端的乱码问题-->
<mvc:annotation-driven>
<mvc:message-converters>
<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.Jackson2ObjectMapperFactoryBean">
<property name="failOnEmptyBeans" value="false"/>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
最后,就是一个完美的java对象返回json到前端的视图:
当然,你也可以把多个对象封装到一个集合(如ArrayList)那么:
@RequestMapping("/h2")
@ResponseBody
public String test2() throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
User user1 = new User("kxy", 19, "男");
User user2 = new User("kxy1", 19, "男");
User user3 = new User("kxy2", 19, "男");
User user4 = new User("kxy3", 19, "男");
ArrayList<User> list = new ArrayList<>();
list.add(user1);
list.add(user2);
list.add(user3);
list.add(user4);
String json = mapper.writeValueAsString(list);
return json;
}
时间戳转换成json:
@GetMapping("/h3")
@ResponseBody
public String test3() throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
mapper.setDateFormat(simpleDateFormat);
Date date = new Date();
String json = mapper.writeValueAsString(date);
return json;
}
如果每个方法里都需要这样重复的代码,我们可以写一个JsonUtil类实现代码的复用:
public class JsonUtil {
public static String getJson(Object o){
return getJson(o,"yyyy-mm-dd HH:mm:ss");
}
public static String getJson(Object o, String dateFormat){
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormat);
mapper.setDateFormat(simpleDateFormat);
try {
return mapper.writeValueAsString(o);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return null;
}
}
@GetMapping("/h3")
@ResponseBody
public String test3(){
return JsonUtil.getJson(new Date(),"yyyy-mm-dd hh:mm:ss");
}
小插曲
关于
@Controller
public class UserController {
@RequestMapping("/h1")
@ResponseBody
public String test() throws {
return "str";
}
}
@RestController
public class UserController {
@RequestMapping("/h1")
public String test() throws {
return "str";
}
}
以上两段代码效果一样。@RestController表示类下面的所有方法的返回值都是一个普通的字符串,不会受视图解析器所影响。
二、结合SpringMVC使用fastJson与前端交互
导包:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.7</version>
</dependency>
用法:
@RequestMapping("/h1")
@ResponseBody
public String test(){
User user = new User("kxy", 19, "男");
return JSON.toJSONString(user);
}
除此之外:
JSON.parseObject() //json转对象
(JSONObject) JSON.toJSON() //java对象转json对象
JSON.toJavaObject() //json对象转java对象