【Spring學習筆記-MVC-4】SpringMVC返回Json數據-方式2


Spring學習筆記-MVC》系列文章,講解返回json數據的文章共有3篇,分別為:
  1. 方式1:講解如果返回單個對象的json;==>使用@ResponseBody來實現;注解方式
  2. 方式2:講解如果返回多個對象的json;==>使用MappingJacksonJsonView來實現;xml配置方式
  3. 方式1-擴展:講解如果返回多個對象的json;==>使用@ResponseBody來實現;注解方式
個人認為,使用 @ResponseBody方式來實現json數據的返回比較方便,推薦使用。

摘要


本文講解另外一種利用spring MVC返回json數據的方法。

前文回顧


在《【Spring學習筆記-MVC-3】返回Json數據-方式1》中介紹了通過:
  1.  @ResponseBody聲明返回值;
  2. 配置<mvc:annotation-driven />;
來返回json數據。效果如下:
  ==>
從上面的效果看,只能返回一個對象,不能返回多個對象,不能做到形如下圖的返回結果,

存在局限性(可能可以返回多個,自己不知道如何實現)。
下面介紹的方式2,利用spring mvc返回json數據,可以實現同時返回多個對象的json數據
特別說明:
使用@ResponseBody可以實現同樣的效果,實現同時返回多個對象的Json數據,而且使用@  ResponseBody方式更簡潔。具體請參考《 【Spring學習筆記-MVC-4】返回Json數據-方式1-kuozh 》。

spring mvc實現json數據返回


具體步驟:
  1. 引入額外jar包:
  2. 使用bean視圖解析器: org.springframework.web.servlet.view.BeanNameViewResolver;
  3. 使用 org.springframework.web.servlet.view.json.MappingJacksonJsonView配置需要返回的對象;
  4. 聲明:<mvc:annotation-driven />;   經測試,不添加這個聲明,將出錯;
說明:
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. <mvc:annotation-driven />
  14. <!-- bean視圖解析器 -->
  15. <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"
  16. p:order="10" />
  17. <!-- XMl及JSON視圖解析器配置 -->
  18. <!-- <bean id="userListJson"
  19. class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"
  20. p:renderedAttributes="userList" /> -->
  21. <bean id="userListJson"
  22. class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
  23. <property name="renderedAttributes">
  24. <set>
  25. <value>userList</value>
  26. <value>School</value>
  27. <value>Work</value>
  28. </set>
  29. </property>
  30. </bean>
  31. </beans>

說明:
如果僅僅返回一個對象的json數據,可以使用簡寫配置:



JSONController.java



執行過程解析

1. 在mvc-dispatcher-servlet.xml文件中我們配置了bean視圖解析器,並設置器優先級為10,
它的優先級是高於
2.邏輯視圖返回值為:u serListJson
它首先會被bean視圖解析器解析,解析發現  u serListJson 對應的bean為:userListJson,其對應的視圖為: 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. }






附件列表

     


    免責聲明!

    本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



     
    粵ICP備18138465號   © 2018-2025 CODEPRJ.COM