json的使用
我们广义上说的后端开发提供接口,其实指的是我们在Controller层定义的域名:端口号/请求名
前端获取这个请求,去赋给比如表单的action,获取相应的结果集并展示。
json:轻量级的数据交换格式
json采用键值对的形式来保存JavaScript的数据,形式类似于:
var json = ‘{“name”:“wang”,“age”:“13”}’;
如果针对一个类进行注解@RestController,那么这个控制类下的所有方法返回的都是字符串,而不是用视图解析器返回视图
后端返回给前端的JSON对象乱码问题
单独解决:
@RequestMapping(value = "j1",produces = "application/json;charaset=utf-8")
配置解决,通过在Spring核心配置文件中的注解驱动来解决:
<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>
前台如何进行javascript对象与json对象转换
var obj = JSON.parse( ‘{“name”:“wang”,“age”:“13”}’);
var json = JSON.stringify({name:‘wang’,age:‘13’});
这个JSON是html自带的一个对象
后台如何进行java对象与json对象转换
其实从本质上来说,json并不是一种新的数据格式,它就是有特定格式的字符串,只不过经过了转换。
测试Json的时候,给控制类上加一个@RestController,防止返回字符串被视图解析器解析成视图返回了。
或者在测试的方法上加一个@ResponseBody,可以有同样效果,但是这个针对单个方法。
一)、使用jackson的方式进行Json数据操作
使用jackson必须要导入依赖:
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.0</version>
</dependency>
使用方法如下:
创建使用对象ObjectMapper mapper = new ObjectMapper();
然后mapper.writeValueAsString(object);就可以返回一个JSON格式的字符串
返回前台可以显示。
@RequestMapping("/j1")
// @ResponseBody 写上这个注解,这个方法就不会走视图解析器,就会直接返回一个字符串
public String Json01(){
//创建一个对象
User user = new User("wang", 13, "男");
String str = "";
ObjectMapper objectMapper = new ObjectMapper();
try {
str = objectMapper.writeValueAsString(user);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return str;
//return JsonUtils.getJson(user);
}
由于JSON的使用非常频繁,而如果每次使用都要不停的去创建ObjectMapper有点影响阅读,因此把它写到工具类中。
package com.wang.utils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import java.text.SimpleDateFormat;
import java.util.Date;
public class JsonUtils {
public static String getJson(Object object){
return getJson(object,"yyyy-MM-dd HH:mm:ss");
}
public static String getJson(Object object,String dateFormate) {
ObjectMapper mapper = new ObjectMapper();
//关闭时间戳定义时间格式
mapper.configure(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS,false);
SimpleDateFormat sdf = new SimpleDateFormat(dateFormate);
mapper.setDateFormat(sdf);
String s = null;
try {
s = mapper.writeValueAsString(object);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return s ;
}
}
以上是包含了目前两个方法
- 第一个方法调用了第二个方法,不影响其传入参数的变化。
- 第二个主要是针对时间的操作,先是定义了时间的显示方式,更改了时间戳的显示,然后根据传入的时间格式返回相关字符串。
使用工具类进行Json的传递:
@RequestMapping(value = "j2")
public String Json02() throws JsonProcessingException {
User user1 = new User("梁志斌", 13, "男");
User user2 = new User("卢崛", 13, "女");
User user3 = new User("李元浩", 13, "男");
User user4 = new User("孙亚龙", 13, "男");
List<User> userlist = new ArrayList<User>();
userlist.add(user1);
userlist.add(user2);
userlist.add(user3);
userlist.add(user4);
// ObjectMapper objectMapper = new ObjectMapper();
// String str = objectMapper.writeValueAsString(userlist);
return JsonUtils.getJson(userlist);
}
二)、使用FastJson的方式进行数据操作
这个是阿里的工具类,同样也需要导入相关依赖
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
</dependency>
使用方法也非常简单,直接JSON.toJSONString(Object)就可以获得一个Json格式字符串
// fastjson的使用
@RequestMapping("/j4")
public String Json04(){
User user1 = new User("梁志斌", 13, "男");
User user2 = new User("卢崛", 13, "女");
User user3 = new User("李元浩", 13, "男");
User user4 = new User("孙亚龙", 13, "男");
List<User> userlist = new ArrayList<User>();
userlist.add(user1);
userlist.add(user2);
userlist.add(user3);
userlist.add(user4);
String s = JSON.toJSONString(userlist);
return s;
}
@RequestMapping("/j5")
public String Json05(){
User user1 = new User("梁志斌", 13, "男");
return JSON.toJSONString(user1);
}
@RequestMapping("/j6")
public String Json06(){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return JSON.toJSONString(sdf.format(new Date()));
}