• 2.《Spring学习笔记-MVC》系列文章,讲解返回json数据的文章共有3篇,分别为:


    转自:https://www.cnblogs.com/ssslinppp/p/4528892.html
    个人认为,使用@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.逻辑视图返回值为:userListJson
    它首先会被bean视图解析器解析,解析发现 userListJson对应的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. }

     





    附件列表

    转载请标明出处:http://www.cnblogs.com/ssslinppp/《Spring学习笔记-MVC》系列文章,讲解返回json数据的文章共有3篇,分别为:
  • 相关阅读:
    FreeIPA部署及基本使用
    第7天:Django模板使用与表单
    第6天:数据库配置与模型
    第5天:基于类的视图与中间件
    linux下修改MySQL表名与表的字符编码
    webService理解(一)
    查询MySQL库下所有表名,数据为空的表名
    linux中MySQL连接找不到mysql.sock文件
    初步书写Webservice项目,运行后报错:Cannot assign requested address: bind
    linux配置jdk,MySQL环境
  • 原文地址:https://www.cnblogs.com/sharpest/p/5764648.html
Copyright © 2020-2023  润新知