1. 程式人生 > >springmvc中操作json,配置FastJson

springmvc中操作json,配置FastJson

目前網路上傳遞資料大部分都是json和xml,但是xml使用的很少了,這裡主要介紹json,一般來說json常用的場景是提供外部介面,請求內使用request域就足夠了

springmvc對於json的支援,上圖

這裡寫圖片描述

1.請求json方式分析

如果請求的json串,要求客戶端進行http請求前需要將請求的內容格式化為json格式資料。
此方法沒有直接post提交key/value格式資料簡單。
如果響應的是json串,很方便客戶端對響應結果資訊進行解析。
所以如果沒有特殊要求請求key/value即可,而為了方便客戶端解析建議將結果資料響應成json。

2.簡介目前實現json和物件互轉的工具類:Jackson,fastjson,gson,需要jar包

springmvc預設是支援Jackson的,配置註解handlerMapping時就會預設配置了Jackson的解析器
但是我在做4.2的json解析時總是報錯,說是無法識別application/json這個contentType,無語了,除錯了好久也不行
所以就是用阿里巴巴的fastJson,這個號稱是目前最快的json解析工具,而且就一個jar包,很方便

3.搭建springmvc的開發環境:具體可以參考我的 這篇文章,這是一個系列:

4,配置Fastjson解析器,這裡使用註解開發,在springmvc配置檔案中新增:

<mvc:annotation-driven
>
<mvc:message-converters register-defaults="true"> <!-- 配置Fastjson支援 --> <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value
>
text/html;charset=UTF-8</value> <value>application/json</value> </list> </property> <property name="features"> <list> <value>WriteMapNullValue</value> <value>QuoteFieldNames</value> </list> </property> </bean> </mvc:message-converters> </mvc:annotation-driven> <!-- 使用註解時一定要配置註解掃描 --> <context:component-scan base-package="com.leige.controler" />

5.頁面開發,這裡使用jquery的ajax非同步請求,需要匯入jquery:

<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.4.4.min.js"></script>

<script type="text/javascript">
    function requestJson(){
        //使用ajax請求
        $.ajax({

            type:'post',
            url:'${pageContext.request.contextPath }/upLoad/requestJson.action',
        contentType:'application/json;charset=utf-8',
            //請求的json,設定
            data:'{"name":"leige","age":55}',
            success:function(data){
                alert(data.name);
            }

        });

    }

    //請求key/value響應json
    function responseJson(){
        //使用ajax請求
        $.ajax({

            type:'post',
            url:'${pageContext.request.contextPath }/upLoad/responseJson.action',
            //請求的json,設定
            //contentType:'application/json;charset=utf-8',
            //不用指定contentType因為預設提交是key/value
            data:'name=leige&age=15',
            success:function(data){
                alert(data);
            }

        });

    }

</script>
<title>json測試</title>
</head>
<body>
<input type="button" value="請求json響應json" onclick="requestJson()"><br/>
<input type="button" value="請求key/value響應json" onclick="responseJson()"><br/>
</body>

controler方法,配置好json解析器後,就只需要使用註解完成:

/**
     * 
     * RequestBody註解會自動將json串轉換為java物件
     * ResponseBody會將java物件轉為json物件
     * @param student
     * @return
     * 
     * 測試json,請求json返回json
     */

    @RequestMapping("/requestJson")
    public   @ResponseBody  Student jsonTest(@RequestBody Student student){     
        return student;


    }

    /**
     * 
     * RequestBody註解會自動將json串轉換為java物件
     * ResponseBody會將java物件轉為json物件
     * @param student
     * 測試key/value返回json
     */
    @RequestMapping("/responseJson")
    public   @ResponseBody  Student responseJson(Student student){  
        return student;


    }

測試結果:

這裡寫圖片描述

**注意
注意一定要配置json解析器,不然會報controler方法返回引數不合法這個錯誤**