JSON数据交互

为什么使用JSON进行数据交互

JSON数据格式比较简单、解析比较方便,在接口调用及HTML⻚面Ajax调用时较常用。

JSON交互方式

  • 请求是KV,响应是JSON(推荐使用)
  • 请求是JSON,响应是JSON

JSON处理工具

  • jackson
  • gson
  • fastjson
    在 SpringMVC 中,对 jackson 和 gson 都提供了相应的支持,就是如果使用 这两个作为 JSON 转换器,只需要添加对应的依赖就可以了,返回的对象和返回的集合、Map 等都会自动转为 JSON,但是,如果使用 fastjson,除了添加相应的依赖之外,还需要自己手动配置 HttpMessageConverter 转换器。其实 前两个也是使用 HttpMessageConverter 转换器,但是是 SpringMVC 自动提供的,SpringMVC 没有给 fastjson 提供相应的转换器。

jackson

输入key/value、输出JSON(推荐)

jackson 是一个使用比较多,时间也比较长的 JSON 处理工具,在 SpringMVC
中使用 jackson ,只需要添加 jackson 的依赖即可:

 
com.fasterxml.jackson.core 
jackson-databind 
2.10.1


依赖添加成功后,凡是在接口中直接返回的对象,集合等等,都会自动转为
JSON。

jsp页面

function responseKV(){ $.ajax({
type:"post",
url:'${pageContext.request.contextPath }/responseKV',
//输入是key/value时,默认就指定好了contentType了,不需要再指定了 
//contentType:'application/json;charset=utf-8', 
//data为key/value形式
data:'name=json测试&price=999',
success:function(data){ alert(data);
} });
}

Controller类

 // 输入是key/value,输出是json
// @ResponseBody 将返回值转成json串响应给前台
@RequestMapping("/responseKV") 
@ResponseBody
public Item responseKV(Item item) {
return item; 
}

⻚面控制台输出

JSON数据交互_第1张图片

输入JSON、输出JSON

JSP⻚面

function requestJson(){
$.ajax({ 
    type:"post",
    url:'${pageContext.request.contextPath }/requestJson', 
    //输入是json是 ,需要指定contentType为application/json
    contentType:'application/json;charset=utf-8',
    data:'{"name":"json测试","price":999}', 
    success:function(data){
        alert(data.name); 
        }
}); }

Controller类

@Controller
public class JsonController {
// 输入是json,输出是json
// @RequestBody 将请求的json串转成java对象 
// @ResponseBody 将返回值转成json串响应给前台 
@RequestMapping("/requestJson")
@ResponseBody
public Item requestJson(@RequestBody Item item) {
return item; }
}

⻚面控制台输出

JSON数据交互_第2张图片

gson

gson 是 Google 推出的一个 JSON 解析器,主要在 Android 开发中使用较 多,不过,Web 开发中也是支持这个的,而且 SpringMVC 还针对 Gson 提供了相关的自动化配置,以致我们在项目中只要添加 gson 依赖,就可以直接使用 gson 来做 JSON 解析了。

 
com.google.code.gson 
gson 
2.8.6


如果项目中,同时存在 jackson 和 gson 的话,那么默认使用的是 jackson
因为:
org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter 类的构造方法中,加载顺序就是先加载 jackson 的 HttpMessageConverter,后加载 gson 的 HttpMessageConverter。
加完依赖之后,就可以直接返回 JSON 字符串了。使用 Gson 时,如果想做自
定义配置,则需要自定义 HttpMessageConverter。

 
    
         
    



    
         
    



     

fastjson

fastjson 号称最快的 JSON 解析器,但是也是这三个中 BUG 最多的一个。在 SpringMVC 并没针对 fastjson 提供相应的 HttpMessageConverter,所以, fastjson 在使用时,一定要自己手动配置 HttpMessageConverter(前面两个如果没有特殊需要,直接添加依赖就可以了)。
使用 fastjson,我们首先添加 fastjson 依赖:

 
com.alibaba 
fastjson 
1.2.60

然后在 SpringMVC 的配置文件中配置 HttpMessageConverter:

 
    
         
    


    
    
         
    
    

fastjson 默认中文乱码,添加如下配置解决:

 
    
         
    


    
        
             
            
            
                 
                    application/json;charset=utf-8
                
    

你可能感兴趣的:(SpringMVC)