原文地址为:
【Spring学习笔记-MVC-4】SpringMVC返回Json数据-方式2
本文讲解另外一种利用 spring MVC返回json数据的方法。
==>
,
存在局限性(可能可以返回多个,自己不知道如何实现)。
具体步骤:
;
浏览器: http://localhost:8080/SpringMVCQs/rest/kfc/brands/showUserListByJson
JSONController.java
转载请注明本文地址: 【Spring学习笔记-MVC-4】SpringMVC返回Json数据-方式2
- 【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数据-方式1-扩展:http://www.cnblogs.com/ssslinppp/p/4675495.html
文章的内容主要如下:
- 方式1:讲解如果返回单个对象的json;==>使用@ResponseBody来实现;注解方式
- 方式2:讲解如果返回多个对象的json;==>使用MappingJacksonJsonView来实现;xml配置方式
- 方式1-扩展:讲解如果返回多个对象的json;==>使用@ResponseBody来实现;注解方式
个人认为,使用
@ResponseBody方式来实现json数据的返回比较方便,推荐使用。
摘要
本文讲解另外一种利用 spring MVC返回json数据的方法。
前文回顾
在《【Spring学习笔记-MVC-3】返回Json数据-方式1》中介绍了通过:
- @ResponseBody声明返回值;
- 配置<mvc:annotation-driven />;
来返回json数据。效果如下:
![](https://i-blog.csdnimg.cn/blog_migrate/4dbc94dcbb545baa0b6c9f2fafb02365.png)
![](https://i-blog.csdnimg.cn/blog_migrate/23b8879f2b01daab9b1e9e44414fbef9.png)
从上面的效果看,只能返回一个对象,不能返回多个对象,不能做到形如下图的返回结果,
![](https://i-blog.csdnimg.cn/blog_migrate/12284552afe16dfecd3fd29ff9d0586c.png)
下面介绍的方式2,利用spring mvc返回json数据,可以实现同时返回多个对象的json数据
特别说明:
使用@ResponseBody可以实现同样的效果,实现同时返回多个对象的Json数据,而且使用@
ResponseBody方式更简洁。具体请参考《
【Spring学习笔记-MVC-4】返回Json数据-方式1-kuozh
》。
spring mvc实现json数据返回
具体步骤:
- 引入额外jar包:
;
- 使用bean视图解析器: org.springframework.web.servlet.view.BeanNameViewResolver;
- 使用 org.springframework.web.servlet.view.json.MappingJacksonJsonView配置需要返回的对象;
- 声明:<mvc:annotation-driven />; 经测试,不添加这个声明,将出错;
说明:
spring mvc默认的最常用的视图解析器为
org.springframework.web.servlet.view.InternalResourceViewResolver
,
![](https://i-blog.csdnimg.cn/blog_migrate/17fce2b4a0784b97a51d0b16ae0c65c9.png)
它的优先级默认是最低的,spring mvc还提供了许多其他类型的视图解析器,比如bean视图解析器
![](https://i-blog.csdnimg.cn/blog_migrate/f14c1217ce3e80e2890eb7d139ed2d16.png)
等,每个视图解析器的优先级都是可以手动设置的。在进行视图解析时,按照视图解析器优先级的顺序去解析视图,直到有视图解析器可以进行解析,解析过程就停止。
项目结构
![](https://i-blog.csdnimg.cn/blog_migrate/37226fc20faf662eaea4117b35c106bd.png)
配置web.xml
![](https://i-blog.csdnimg.cn/blog_migrate/827a24d8ef4e56b4c07bad1a2556ad3d.png)
<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
![](https://i-blog.csdnimg.cn/blog_migrate/e739c7bd1ce4612de2c50ee907dfc8b0.png)
![](https://i-blog.csdnimg.cn/blog_migrate/90f296a69d8ae7b07cf572c8840ae3b0.png)
![](https://i-blog.csdnimg.cn/blog_migrate/469b2256f28104396ff138633d79d982.png)
![](https://i-blog.csdnimg.cn/blog_migrate/38a6de52534d01d275905952af77e6d2.png)
<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数据,可以使用简写配置:
![](https://i-blog.csdnimg.cn/blog_migrate/b74b1968ac168798b8af1f64a3280978.png)
JSONController.java
![](https://i-blog.csdnimg.cn/blog_migrate/c8dc05b82bdb1b3fa002af1561bf2c4e.png)
执行过程解析
1. 在mvc-dispatcher-servlet.xml文件中我们配置了bean视图解析器,并设置器优先级为10,
,
![](https://i-blog.csdnimg.cn/blog_migrate/b04fa5113c57506e41f545fd82cd57c3.png)
它的优先级是高于
![](https://i-blog.csdnimg.cn/blog_migrate/74c0453a34caa1561e0b6b4726912cb0.png)
2.逻辑视图返回值为:u
serListJson
,
![](https://i-blog.csdnimg.cn/blog_migrate/621b601a0e7a429ae3f47898e502a453.png)
它首先会被bean视图解析器解析,解析发现
u
serListJson
对应的bean为:userListJson,其对应的视图为:
MappingJacksonJsonView;
![](https://i-blog.csdnimg.cn/blog_migrate/fceb461a67b3bb27da979513632250d2.png)
这样,便将userlist、School和work转化为json数据,并返回前台。
运行
浏览器: http://localhost:8080/SpringMVCQs/rest/kfc/brands/showUserListByJson
![](https://i-blog.csdnimg.cn/blog_migrate/7f8e808221c3134137cc11eda03231c4.png)
完整程序
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";
}
}
附件列表
转载请注明本文地址: 【Spring学习笔记-MVC-4】SpringMVC返回Json数据-方式2