【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



    
    
    
    
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>Spring Web MVC Application</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc-dispatcher</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping></web-app>



配置mvc-dispatcher-servlet.xml







  
  
  
  
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <context:component-scan base-package="com.ll.controller" /> <mvc:annotation-driven /> <!-- bean視圖解析器 --> <bean class="org.springframework.web.servlet.view.BeanNameViewResolver" p:order="10" /> <!-- XMl及JSON視圖解析器配置 --> <!-- <bean id="userListJson" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" p:renderedAttributes="userList" /> --> <bean id="userListJson" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"> <property name="renderedAttributes"> <set> <value>userList</value> <value>School</value> <value>Work</value> </set> </property> </bean></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
   
   
   
   
package com.ll.controller;import java.util.ArrayList;import java.util.List;import org.springframework.stereotype.Controller;import org.springframework.ui.ModelMap;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.ResponseBody;import com.ll.model.Person;import com.ll.model.Shop;@Controller@RequestMapping("/kfc/brands")public class JSONController { @RequestMapping(value="/getShopInJson", method = RequestMethod.GET) public @ResponseBody Shop getShopInJSON() { System.out.println("-----請求json數據--------"); Shop shop = new Shop(); shop.setName("zhangsan"); shop.setStaffName(new String[]{"mkyong1", "mkyong2"}); return shop; } @RequestMapping(value = "/showUserListByJson") public String showUserListInJson(ModelMap mm) { List<Person> userList = new ArrayList<Person>(); Person user1 = new Person(); user1.setUsername("tom"); user1.setPasswd("湯姆"); Person user2 = new Person(); user2.setUsername("john"); user2.setPasswd("約翰"); userList.add(user1); userList.add(user2); mm.addAttribute("userList", userList); mm.addAttribute("School","SuZhou"); mm.addAttribute("Work","YanFa"); return "userListJson"; }}






附件列表

相關文章
相關標籤/搜索