【Spring学习笔记-MVC-4】返回Json数据-方式2

摘要


本文讲解另外一种利用spring MVC返回json数据的方法。

前文回顾



在《【Spring学习笔记-MVC-3】返回Json数据-方式1》中介绍了通过:

  1. @ResponseBody声明返回值;
  2. 配置<mvc:annotation-driven />;

来返回json数据。效果如下:

  ==>

从上面的效果看,只能返回一个对象,不能返回多个对象,不能做到形如下图的返回结果,

存在局限性(可能可以返回多个,自己不知道如何实现)。

下面介绍的方式2,利用spring mvc返回json数据,可以实现同时返回多个对象的json数据

spring mvc实现json数据返回


具体步骤:

  1. 引入额外jar包:
  2. 使用bean视图解析器:

    org.springframework.web.servlet.view.BeanNameViewResolver;
  3. 使用

    org.springframework.web.servlet.view.json.MappingJacksonJsonView配置需要返回的对象;

说明:

spring mvc默认的最常用的视图解析器为org.springframework.web.servlet.view.InternalResourceViewResolver,

它的优先级默认是最低的,spring mvc还提供了许多其他类型的视图解析器,比如bean视图解析器

等,每个视图解析器的优先级都是可以手动设置的。在进行视图解析时,按照视图解析器优先级的顺序去解析视图,直到有视图解析器可以进行解析,解析过程就停止。

项目结构



配置web.xml




  1. <web-app id="WebApp_ID" version="2.4"
  2. xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
  4. http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  5. <display-name>Spring Web MVC Application</display-name>
  6. <context-param>
  7. <param-name>contextConfigLocation</param-name>
  8. <param-value>classpath:applicationContext.xml</param-value>
  9. </context-param>
  10. <listener>
  11. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  12. </listener>
  13. <servlet>
  14. <servlet-name>mvc-dispatcher</servlet-name>
  15. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  16. <load-on-startup>1</load-on-startup>
  17. </servlet>
  18. <servlet-mapping>
  19. <servlet-name>mvc-dispatcher</servlet-name>
  20. <url-pattern>/rest/*</url-pattern>
  21. </servlet-mapping>
  22. </web-app>

配置mvc-dispatcher-servlet.xml



  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:context="http://www.springframework.org/schema/context"
  3. xmlns:p="http://www.springframework.org/schema/p"
  4. xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="
  6. http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  8. http://www.springframework.org/schema/context
  9. http://www.springframework.org/schema/context/spring-context-3.0.xsd
  10. http://www.springframework.org/schema/mvc
  11. http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
  12. <context:component-scan base-package="com.ll.controller" />
  13. <!-- bean视图解析器 -->
  14. <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"
  15. p:order="10" />
  16. <!-- XMl及JSON视图解析器配置 -->
  17. <!-- <bean id="userListJson"
  18. class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"
  19. p:renderedAttributes="userList" /> -->
  20. <bean id="userListJson"
  21. class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
  22. <property name="renderedAttributes">
  23. <set>
  24. <value>userList</value>
  25. <value>School</value>
  26. <value>Work</value>
  27. </set>
  28. </property>
  29. </bean>
  30. </beans>

说明:

如果仅仅返回一个对象的json数据,可以使用简写配置:


JSONController.java


执行过程解析



1. 在mvc-dispatcher-servlet.xml文件中我们配置了bean视图解析器,并设置器优先级为10,

它的优先级是高于

的;

2.逻辑视图返回值为:userListJson,

它首先会被bean视图解析器解析,解析发现 userListJson对应的bean为:json.MappingJacksonJsonView;

这样,便将userlist、School和work转化为json数据,并返回前台。

运行


浏览器: http://localhost:8080/SpringMVCQs/rest/kfc/brands/showUserListByJson

完整程序


JSONController.java


  1. package com.ll.controller;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import org.springframework.stereotype.Controller;
  5. import org.springframework.ui.ModelMap;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.RequestMethod;
  8. import org.springframework.web.bind.annotation.ResponseBody;
  9. import com.ll.model.Person;
  10. import com.ll.model.Shop;
  11. @Controller
  12. @RequestMapping("/kfc/brands")
  13. public class JSONController {
  14. @RequestMapping(value="/getShopInJson", method = RequestMethod.GET)
  15. public @ResponseBody Shop getShopInJSON() {
  16. System.out.println("-----请求json数据--------");
  17. Shop shop = new Shop();
  18. shop.setName("zhangsan");
  19. shop.setStaffName(new String[]{"mkyong1", "mkyong2"});
  20. return shop;
  21. }
  22. @RequestMapping(value = "/showUserListByJson")
  23. public String showUserListInJson(ModelMap mm) {
  24. List<Person> userList = new ArrayList<Person>();
  25. Person user1 = new Person();
  26. user1.setUsername("tom");
  27. user1.setPasswd("汤姆");
  28. Person user2 = new Person();
  29. user2.setUsername("john");
  30. user2.setPasswd("约翰");
  31. userList.add(user1);
  32. userList.add(user2);
  33. mm.addAttribute("userList", userList);
  34. mm.addAttribute("School","SuZhou");
  35. mm.addAttribute("Work","YanFa");
  36. return "userListJson";
  37. }
  38. }

来自为知笔记(Wiz)

时间: 2024-10-09 22:51:43

【Spring学习笔记-MVC-4】返回Json数据-方式2的相关文章

【Spring学习笔记-MVC-3】返回Json数据-方式1

摘要 使用Spring MVC,实现json数据的返回. 参考网站 http://www.mkyong.com/spring-mvc/spring-3-mvc-and-json-example/  http://my.oschina.net/abian/blog/128028 需要的jar包 上面两个都是必须的. 项目结构 程序代码 Shop.java package com.ll.model; public class Shop { String name; String staffName[

CoAP学习笔记——nodeJS node-coap返回JSON数据包

0 前言 本文说明如何使用node-coap返回JSON数据包.CoAP是专门为物联网系统开发的面向网络的应用层协议栈,CoAP建立在UDP协议之上尽可能减少网络开销,又具有HTTP Restful类型的特性.node-coap使用nodejs实现了coap的客户端和服务器端. [测试环境]--ubuntu/Linux [相关博文] [CoAP协议文档--The Constrained Application Protocol (CoAP)] [CoAP协议学习--CoAP基础] [CoAP学习

【Spring学习笔记-MVC-3.1】SpringMVC返回Json数据-方式1-扩展

<Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www.cnblogs.com/ssslinppp/p/4528892.html [Spring学习笔记-MVC-4]返回Json数据-方式2:http://www.cnblogs.com/ssslinppp/p/4530002.html [Spring学习笔记-MVC-3.1]SpringMVC返回Json数据-

Spring MVC中返回JSON数据的几种方式

我们都知道Spring MVC 的Controller方法中默认可以返回ModeAndView 和String 类型,返回的这两种类型数据是被DispatcherServlet拿来给到视图解析器进行继续处理返回页面的,而不是直接返回给客户端的.有时候我们需要发请求后让服务端直接返回一些数据,不再经过DispatcherServlet,这个时候通常有两种方式: 1.使用@ResponseBody注解 该注解的作用是把方法返回结果转成json或xml格式并进行返回,不管要返回什么类型的数据,是Str

MVC中返回json数据的两种方式

MVC里面如果直接将数据返回到前端页面,我们常用的方式就是用return view(): 那么我不想直接用razor语法,毕竟razor这玩意儿实在是太难记了,还不如写ajax对接来得舒服不是 那么我们可以这么做 1.定义ActionResult,返回json,标记属性可以采用HttpPost,也可以是用HttpGet,按自己的需求来使用 public ActionResult UpdateDownloadInJson(string deviceNames,string programNames

spring MVC之返回JSON数据(Spring3.0 MVC)

方式一:使用ModelAndView的contentType是"application/json" 方式二:返回String的            contentType是"text/html" 那么如何设置response的content type呢? 使用注解@RequestMapping 中的produces: @RequestMapping(value = "/upload",produces="application/jso

AJAX MVC 服务器返回Json数据,客户端获取Json数据

<> 控制器 Controller using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Script.Serialization; namespace MvcApplication2.Controllers { public class HomeController : Controller { pu

AJAX MVC server返回Json数据,client获取Json数据

<> 控制器 Controller using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Script.Serialization; namespace MvcApplication2.Controllers { public class HomeController : Controller { pu

【Spring学习笔记-MVC-5】利用spring MVC框架,实现ajax异步请求以及json数据的返回

作者:ssslinppp      时间:2015年5月26日 15:32:51 1. 摘要 本文讲解如何利用spring MVC框架,实现ajax异步请求以及json数据的返回. Spring MVC与json参考文章:[spring学习笔记-mvc-3]返回json数据-方式1  和 [spring学习笔记-mvc-4]返回json数据-方式2. 使用到的技术主要如下: Ajax:使用JQuery 提供的ajax:==>需要引入jquery.min.js文件: Spring MVC: Jso