zoukankan      html  css  js  c++  java
  • springmvc实现json交互 -requestBody和responseBody

    json数据交互

    1.为什么要进行json数据交互

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

    比如:webservice接口,传输json数据.

    2.springmvc进行json交互



    (1)请求json、输出json,要求请求的是json串,所以在前端页面中需要将请求的内容转成json,不太方便。

    (2)请求key/value、输出json。此方法比较常用。

    3.环境准备

    3.1加载json转的jar包

    springmvc中使用jackson的包进行json转换(@requestBody和@responseBody使用下边的包进行json转),如下:

    jackson-core-asl-1.9.11.jar

    jackson-mapper-asl-1.9.11.jar

    @RequestBody作用:

    @RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容转换为json、xml等格式的数据并绑定到controller方法的参数上。

    本例子应用:

    @RequestBody注解实现接收http请求的json数据,将json数据转换为java对象

    @ResponseBody作用:

    该注解用于将Controller的方法返回的对象,通过HttpMessageConverter接口转换为指定格式的数据如:json,xml等,通过Response响应给客户端

    本例子应用:

    @ResponseBody注解实现将controller方法返回对象转换为json响应给客户端

    3.2配置json转换器

    在注解适配器中加入messageConverters

    [html] view plaincopy
     
    1. <!--注解适配器 -->  
    2.     <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">  
    3.         <property name="messageConverters">  
    4.         <list>  
    5.         <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>  
    6.         </list>  
    7.         </property>  
    8.     </bean>  



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

    4.json交互测试

    4.1输入json串,输出是json串

    4.1.1jsp页面

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

    使用jduery别忘记引入jquery-1.4.4.min.js

    [html] view plaincopy
     
    1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
    2. <%  
    3. String path = request.getContextPath();  
    4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
    5. %>  
    6.   
    7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
    8. <html>  
    9.   <head>  
    10.     <base href="<%=basePath%>">  
    11.       
    12.     <title>json交互测试</title>  
    13.     <script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.4.4.min.js"></script>  
    14.     <script type="text/javascript">  
    15.         //请求的是json,输出的是json  
    16.         function reuqestJson(){  
    17.             $.ajax({  
    18.                 type:'post',  
    19.                 url:'${pageContext.request.contextPath }/requestJson.action',  
    20.                 contentType:'application/json;charset=utf-8',     
    21.                 //数据格式是json串,商品信息  
    22.                 data:'{"name":"手机","price":999}',  
    23.                 success:function(data){//返回json结果  
    24.                     alert(data);  
    25.                 }   
    26.             });  
    27.         }  
    28.     </script>  
    29.   
    30.   </head>  
    31.     
    32.   <body>  
    33.     <input type="button" onclick="reuqestJson()"  value="请求的是json,输出的是json"/>  
    34.   </body>  
    35. </html>  



    4.1.2controller

    [java] view plaincopy
     
    1. package cn.edu.hpu.ssm.controller;  
    2.   
    3. import org.springframework.stereotype.Controller;  
    4. import org.springframework.web.bind.annotation.RequestBody;  
    5. import org.springframework.web.bind.annotation.RequestMapping;  
    6. import org.springframework.web.bind.annotation.ResponseBody;  
    7.   
    8. import cn.edu.hpu.ssm.po.ItemsCustom;  
    9.   
    10. //json交互测试  
    11. @Controller  
    12. public class JsonText {  
    13.       
    14.     //请求json(商品信息),输出json(商品信息)  
    15.     //@RequestBody将请求的商品信息的json串转成itemsCustom对象  
    16.     //@ResponseBody将itemsCustom转成json格式输出  
    17.     @RequestMapping("/requestJson")  
    18.     public @ResponseBody ItemsCustom requestJson(@RequestBody ItemsCustom itemsCustom){  
    19.           
    20.         //@ResponseBody将itemsCustom转成json格式输出  
    21.         return itemsCustom;  
    22.     }  
    23. }  



    4.1.3测试结果



    4.2输入key/value,输出是json串

    4.2.1jsp页面

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

    [html] view plaincopy
     
    1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
    2. <%  
    3. String path = request.getContextPath();  
    4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
    5. %>  
    6.   
    7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
    8. <html>  
    9.   <head>  
    10.     <base href="<%=basePath%>">  
    11.     <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" >  
    12.     <title>json交互测试</title>  
    13.     <script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.4.4.min.js"></script>  
    14.     <script type="text/javascript">  
    15.         //请求是key/value,输出是json  
    16.         function responseJson(){  
    17.             $.ajax({  
    18.                     type:'post',  
    19.                     url:'${pageContext.request.contextPath }/responseJson.action',    
    20.                     //请求的是key/value,这里不需要指定contentType,因为默认就是key/value类型  
    21.                     //contentType:'application/json;charset=utf-8',   
    22.                     //数据格式是json串,商品信息  
    23.                     data:'name=手机&price=999',  
    24.                     success:function(data){//返回json结果  
    25.                         alert(data);  
    26.                     }   
    27.                 });  
    28.         }  
    29.     </script>  
    30.   
    31.   </head>  
    32.     
    33.   <body>  
    34.     <input type="button" onclick="requestJson()" value="请求的是key/value,输出的是json"/>  
    35.   </body>  
    36. </html>  



    4.2.2controller

    [java] view plaincopy
     
    1. package cn.edu.hpu.ssm.controller;  
    2.   
    3. import org.springframework.stereotype.Controller;  
    4. import org.springframework.web.bind.annotation.RequestBody;  
    5. import org.springframework.web.bind.annotation.RequestMapping;  
    6. import org.springframework.web.bind.annotation.ResponseBody;  
    7.   
    8. import cn.edu.hpu.ssm.po.ItemsCustom;  
    9.   
    10. //json交互测试  
    11. @Controller  
    12. public class JsonText {  
    13.       
    14.     //请求key/value(商品信息),输出json(商品信息)  
    15.     @RequestMapping("/responseJson")  
    16.     public @ResponseBody ItemsCustom responseJson(ItemsCustom itemsCustom){  
    17.           
    18.         //@ResponseBody将itemsCustom转成json格式输出  
    19.         System.out.println("前台传过来得商品名:"+itemsCustom.getName());  
    20.         return itemsCustom;  
    21.     }  
    22. }  



    4.2.3测试

    后台控制台输出了"前台传过来的商品名:手机",且查看http数据可以看到json数据的反馈。

    转载请注明出处:http://www.lai18.com/content/505491.html

  • 相关阅读:
    企业微信的部门长度问题
    MVC中view与controller传json数据
    jQuery.extend()、jQuery.fn.extend()扩展方法示例详解
    程序员成长思维:把自己当做产品来发展
    发展你的兴趣,而不是跟随你的兴趣
    领导力:不要做个“好人”
    Nginx性能优化
    【.NET与树莓派】上手前的一些准备工作
    php curl时遇到Can't load the certificate "..." and its private key: OSStatus -25299的问题
    ASCII码字符对照表
  • 原文地址:https://www.cnblogs.com/cnblog-long/p/6547380.html
Copyright © 2011-2022 走看看