码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-05-26 12:27:20      阅读:5087      评论:0      收藏:0      [点我收藏+]

标签:

摘要

本文讲解另外一种利用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. }






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

标签:

原文地址:http://www.cnblogs.com/ssslinppp/p/4530002.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!