zoukankan      html  css  js  c++  java
  • springmvc学习笔记(18)-json数据交互

    springmvc学习笔记(18)-json数据交互

    标签: springmvc



    本文主要介绍怎样在springmvc中进行json数据的交互。先是环境准备和配置,然后分别展示了“输入json串,输出是json串”和“输入key/value,输出是json串”两种情况下的交互

    springmvc进行json交互

    json数据格式在接口调用中、html页面中较经常使用。json格式比較简单,解析还比較方便。

    比方:webservice接口。传输json数据.

    json交互

    • 请求json、输出json,要求请求的是json串,所以在前端页面中须要将请求的内容转成json,不太方便。
    • 请求key/value、输出json。此方法比較经常使用。

    环境准备

    加入json转换的依赖

    最開始我少了jackson-databind依赖,程序各种报错。

    
    <!-- json 转换-->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.7.2</version>
    </dependency>
    
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.9.13</version>
    </dependency>

    查看依赖树

    [INFO] +- com.fasterxml.jackson.core:jackson-databind:jar:2.7.2:compile
    [INFO] |  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.7.0:compile
    [INFO] |  - com.fasterxml.jackson.core:jackson-core:jar:2.7.2:compile
    [INFO] - org.codehaus.jackson:jackson-mapper-asl:jar:1.9.13:compile
    [INFO]    - org.codehaus.jackson:jackson-core-asl:jar:1.9.13:compile

    配置json转换器

    在注解适配器中加入messageConverters

    
    <!--注解适配器 -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
        <list>
        <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>
        </list>
        </property>
    </bean>

    注意:假设使用<mvc:annotation-driven />则不用定义上边的内容。

    json交互測试

    显示两个按钮分别測试

    • jsp页面
    <%--
      Created by IntelliJ IDEA.
      User: brian
      Date: 2016/3/7
      Time: 20:49
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>json交互測试</title>
        <script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.4.4.min.js"></script>
        <script type="text/javascript">
            //请求json,输出是json
            function requestJson(){     省略    }
            //请求key/value。输出是json
            function responseJson(){    省略    }
        </script>
    </head>
    <body>
    <input type="button" onclick="requestJson()" value="请求json。输出是json"/>
    <input type="button" onclick="responseJson()" value="请求key/value,输出是json"/>
    </body>
    
    • controller
    @Controller
    public class JsonTest {
        省略
    }
    • 測试结果

    输入json串,输出是json串

    使用jquery的ajax提交json串,对输出的json结果进行解析。

    • jsp页面
    //请求json,输出是json
    function requestJson(){
    
        $.ajax({
            type:'post',
            url:'${pageContext.request.contextPath }/requestJson.action',
            contentType:'application/json;charset=utf-8',
            //数据格式是json串,商品信息
            data:'{"name":"手机","price":999}',
            success:function(data){//返回json结果
                alert(data);
            }
    
        });
    
    }
    • controller
     //请求json串(商品信息),输出json(商品信息)
    //@RequestBody将请求的商品信息的json串转成itemsCustom对象
    //@ResponseBody将itemsCustom转成json输出
    @RequestMapping("/requestJson")
    public @ResponseBody ItemsCustom requestJson(@RequestBody ItemsCustom itemsCustom){
    
        //@ResponseBody将itemsCustom转成json输出
        return itemsCustom;
    }
    • 測试结果

    请求json,返回json

    能够看到,request和response的HTTP头的Content-Type都是application/json;charset=utf-8

    请求json,返回json,response的body

    输入key/value,输出是json串

    使用jquery的ajax提交key/value串,对输出的json结果进行解析

    • jsp页面
    //请求key/value,输出是json
    function responseJson(){
    
        $.ajax({
            type:'post',
            url:'${pageContext.request.contextPath }/responseJson.action',
            //请求是key/value这里不须要指定contentType,由于默认就 是key/value类型
            //contentType:'application/json;charset=utf-8',
            //数据格式是json串。商品信息
            data:'name=手机&price=999',
            success:function(data){//返回json结果
                alert(data.name);
            }
    
        });
    
    }
    • controller
     //请求key/value,输出json
    @RequestMapping("/responseJson")
    public @ResponseBody ItemsCustom responseJson(ItemsCustom itemsCustom){
    
        //@ResponseBody将itemsCustom转成json输出
        return itemsCustom;
    }
    • 測试结果

    请求key/value,返回json

    能够看到。key/value键值对的默认Content-Type是application/x-www-form-urlencoded,同一时候。我们收到了响应“手机”


    作者@brianway很多其它文章:个人站点 | CSDN | oschina

  • 相关阅读:
    JSP技术
    Eclipse中新建Maven Web项目报错:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
    Zuul【文件上传】
    Zuul【限流】
    Zuul【自定义Filter】
    Zuul【工作原理】
    Zuul【基础配置】
    Zuul【入门】
    Hystrix【参数配置及缓存】
    Hystrix【异常机制处理】
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7196655.html
Copyright © 2011-2022 走看看