当前位置: 首页 > news >正文

spring mvc返回json字符串的方式

 spring mvc返回json字符串的方式

方案一:使用@ResponseBody 注解返回响应体 直接将返回值序列化json

           优点:不需要自己再处理

步骤一:在spring-servlet.xml文件中配置如下代码

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
     xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd ">
 
     <!--使用Annotation方式 完成映射  -->
     <!--让spring扫描包下所有的类,让标注spring注解的类生效  -->
     <context:component-scan base-package="cn.hmy.controller"/>
     <mvc:annotation-driven/>  
     <!--视图解析器  -->
     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
     <property name="prefix" value="/WEB-INF/jsp/"></property>
     <property name="suffix" value=".jsp"></property>
     </bean>




</beans>
复制代码

步骤二:在处理器方法中打上@ResponseBody  标签

复制代码
@RequestMapping(value="/hello5.do")
    @ResponseBody
    public String hello(HttpServletResponse response) throws IOException{
        UserInfo u1=new UserInfo();
        u1.setAge(15);
        u1.setUname("你好");
        
        UserInfo u2=new UserInfo();
        u2.setAge(152);
        u2.setUname("你好2");
        Map<String,UserInfo> map=new HashMap<String, UserInfo>();
        map.put("001", u1);
        map.put("002", u2);
        String jsonString = JSON.toJSONString(map);
        return jsonString;
    }
    
复制代码

步骤三:使用ajax进行获取数据

复制代码
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
    
    <script type="text/javascript" src="js/jquery-1.8.3.js"></script>
    <script type="text/javascript">
      $(function(){
         $("#btn").click(function(){
             $.ajax({
               url:"<%=path%>/Five.do",
               success:function(data){ 
               //解析对象
               //alert(data.uname+"\n"+data.age);
               //解析map
               //alert(data.info.age+"\n"+data.info.uname);
               //解析list
               $.each(data,function(i,dom){
               alert(dom.uname+"\n"+dom.age);
               });
               }
             });
         });
      });
    </script>
  </head>
  
  <body>
    <input type="button" value="ajax" id="btn"/>
    
  </body>
</html>
复制代码

方案二:处理器方法的返回值---Object

由于返回Object数据,一般都是将数据转化为JSON对象后传递给浏览器页面的,而这个由Object转换为Json,是由Jackson工具完成的,所以要导入jar包,将Object数据转化为json数据,需要Http消息转换器 HttpMessageConverter完成。而转换器的开启,需要由<mvc:annotation-driven/> 来完成,当spring容器进行初始化过程中,在<mvc:annotation-driven/> 处创建注解驱动时,默认创建了七个HttpMessageConverter对象,也就是说,我们注册<mvc:annotation-driven/>,就是为了让容器帮我们创建HttpMessageConverter对象


详细代码看

方案二、使用返回字符串的处理器方法,去掉@ResponseBody注解

步骤一、同上

步骤二

复制代码
@RequestMapping(value="/hello5.do")
    public String hello(HttpServletResponse response) throws IOException{
        UserInfo u1=new UserInfo();
        u1.setAge(15);
        u1.setUname("你好");
        
        UserInfo u2=new UserInfo();
        u2.setAge(152);
        u2.setUname("你好2");
        Map<String,UserInfo> map=new HashMap<String, UserInfo>();
        map.put("001", u1);
        map.put("002", u2);
        String jsonString = JSON.toJSONString(map);
        return jsonString;
    }
复制代码

步骤三、在前台取值的时候需要我么做一遍处理

复制代码
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
    
    <script type="text/javascript" src="js/jquery-1.8.3.js"></script>
    <script type="text/javascript">
      $(function(){
         $("#btn").click(function(){
             $.ajax({
               url:"<%=path%>/hello5.do",
               success:function(data){ //data指的是从server打印到浏览器的数据
                   //jsonString jsonObject
                   //{"001":{"age":122,"name":"顺利就业"}}
                  var result= eval("("+data+")");
                   $.each(result,function(i,dom){
                      alert(dom.age+"\n"+dom.uname);
                      
                   });
                //  alert(result["001"]["age"]);
               }
             });
         });
      });
    </script>
  </head>
  
  <body>
    <input type="button" value="ajax" id="btn"/>
    
  </body>
</html>
复制代码

方案三:使用无返回值的处理器方法

步骤一:同上

步骤二:使用响应流回送数据

复制代码
@RequestMapping(value="/hello5.do")
    public void hello(HttpServletResponse response) throws IOException{
        UserInfo u1=new UserInfo();
        u1.setAge(15);
        u1.setUname("你好");
        
        UserInfo u2=new UserInfo();
        u2.setAge(152);
        u2.setUname("你好2");
        Map<String,UserInfo> map=new HashMap<String, UserInfo>();
        map.put("001", u1);
        map.put("002", u2);
        String jsonString = JSON.toJSONString(map);
        response.setCharacterEncoding("utf-8");
        response.getWriter().write(jsonString);
        response.getWriter().close();
        
    }
复制代码

步骤三:在前台取值也需要做处理

复制代码
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
    
    <script type="text/javascript" src="js/jquery-1.8.3.js"></script>
    <script type="text/javascript">
      $(function(){
         $("#btn").click(function(){
             $.ajax({
               url:"<%=path%>/hello5.do",
               success:function(data){ //data指的是从server打印到浏览器的数据
                   //jsonString jsonObject
                   //{"001":{"age":122,"name":"顺利就业"}}
                  var result= eval("("+data+")");
                   $.each(result,function(i,dom){
                      alert(dom.age+"\n"+dom.uname);
                      
                   });
                //  alert(result["001"]["age"]);
               }
             });
         });
      });
    </script>
  </head>
  
  <body>
    <input type="button" value="ajax" id="btn"/>
    
  </body>
</html>

转载于:https://www.cnblogs.com/ahaijava/p/10176729.html

相关文章:

  • Linux 下的dd命令使用详解
  • ES 5 中 判断数组的方法
  • [HNOI2008]水平可见直线
  • 电商产品设计实战(二):电商整体产品架构
  • Integer类toString(int i,int radix)方法
  • 普通java工程的resources目录寻址
  • express.js的介绍及使用
  • Intel要在中国投35亿美金造这种闪存,3DxPoint技术牛在哪里?
  • MongoDB系统CentOS 7.1 crash的排障过程
  • MySQL建表语句转PostgreSQL建表语句全纪录
  • JAVA设计模式之观察者模式
  • 安装mongo,新建数据库,添加普通用户
  • 【EOS】Cleos基础
  • 视频课左右滑动后应该定位
  • 2019智能合约开发新趋势
  • 【译】理解JavaScript:new 关键字
  • 0x05 Python数据分析,Anaconda八斩刀
  • Bootstrap JS插件Alert源码分析
  • C++类中的特殊成员函数
  • CAP理论的例子讲解
  • Django 博客开发教程 16 - 统计文章阅读量
  • ECMAScript6(0):ES6简明参考手册
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • java小心机(3)| 浅析finalize()
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • opencv python Meanshift 和 Camshift
  • PHP 7 修改了什么呢 -- 2
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • SegmentFault 2015 Top Rank
  • Spring框架之我见(三)——IOC、AOP
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 好的网址,关于.net 4.0 ,vs 2010
  • 计算机在识别图像时“看到”了什么?
  • 跨域
  • 区块链共识机制优缺点对比都是什么
  • 使用 QuickBI 搭建酷炫可视化分析
  • 阿里云移动端播放器高级功能介绍
  • 回归生活:清理微信公众号
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (0)Nginx 功能特性
  • (solr系列:一)使用tomcat部署solr服务
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .naturalWidth 和naturalHeight属性,
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .NET Framework 4.6.2改进了WPF和安全性
  • .net Signalr 使用笔记
  • .NET 使用 XPath 来读写 XML 文件
  • .NET开发人员必知的八个网站