SpringMVC系列(十一)把后台返回的数据转换成json、文件下载、文件上传

2023-05-16

一、后台返回的数据转换成json

1、引入转换json需要的3个依赖


 1 <!--json转换需要的依赖 begin  -->
 2     <dependency>
 3       <groupId>com.fasterxml.jackson.core</groupId>
 4       <artifactId>jackson-annotations</artifactId>
 5       <version>2.9.2</version>
 6     </dependency>
 7     <dependency>
 8       <groupId>com.fasterxml.jackson.core</groupId>
 9       <artifactId>jackson-core</artifactId>
10       <version>2.9.1</version>
11       <type>jar.sha256</type>
12     </dependency>
13     <dependency>
14       <groupId>com.fasterxml.jackson.core</groupId>
15       <artifactId>jackson-databind</artifactId>
16       <version>2.9.2</version>
17     </dependency>
18     <!--json转换需要的依赖 end  -->  

2、写handle

一定要加上注解@ResponseBody


1 @ResponseBody
2     @RequestMapping("/testJson")
3     public Collection<Employee> testJson(){
4         return employeeDao.getAll();
5     }  

3、在index.jsp用ajax发请求


 1 <script type="text/javascript" src="scripts/jquery-1.9.1.min.js"></script>
 2 <script type="text/javascript">
 3     $(function(){
 4         $("#testJson").click(function(){
 5             var url = this.href;
 6             var args = {};
 7             $.post(url, args, function(data){
 8                 for(var i = 0; i < data.length; i++){
 9                     var id = data[i].id;
10                     var lastName = data[i].lastName;
11                     
12                     alert(id + ": " + lastName);
13                 }
14             });
15             return false;
16         });
17     })
18 </script>
19 </head>
20 <body>
21     
22     <a href="testJson" id="testJson">Test Json</a>
23 </body>
24 </html>  

查看请求响应结果

[
{"id":1001,"lastName":"E-AA","email":"aa@163.com","gender":1,"department":{"id":101,"departmentName":"D-AA"},"birth":null,"salary":null},
{"id":1002,"lastName":"E-BB","email":"bb@163.com","gender":1,"department":{"id":102,"departmentName":"D-BB"},"birth":null,"salary":null},
{"id":1003,"lastName":"E-CC","email":"cc@163.com","gender":0,"department":{"id":103,"departmentName":"D-CC"},"birth":null,"salary":null},
{"id":1004,"lastName":"E-DD","email":"dd@163.com","gender":0,"department":{"id":104,"departmentName":"D-DD"},"birth":null,"salary":null},
{"id":1005,"lastName":"E-EE","email":"ee@163.com","gender":1,"department":{"id":105,"departmentName":"D-EE"},"birth":null,"salary":null}
]

4、原理分析:使用HttpMessageConverter<T>转换

• HttpMessageConverter<T> 是 Spring3.0 新添加的一个接口,负责将请求信息转换为一个对象(类型为 T),将对象(类型为 T)输出为响应信息。

• 使用 HttpMessageConverter<T> 将请求信息转化并绑定到处理方法的入参中或将响应结果转为对应类型的响应信息,Spring 提供了两种途径:
– 使用 @RequestBody / @ResponseBody 对处理方法进行标注
– 使用 HttpEntity<T> / ResponseEntity<T> 作为处理方法的入参或返回值
• 当控制器处理方法使用到 @RequestBody/@ResponseBody 或HttpEntity<T>/ResponseEntity<T> 时, Spring 首先根据请求头或响应头的Accept 属性选择匹配的 HttpMessageConverter, 进而根据参数类型或泛型类型的过滤得到匹配的 HttpMessageConverter, 若找不到可用的HttpMessageConverter 将报错
• @RequestBody 和 @ResponseBody 不需要成对出现

原理图如下:

 

 二、文件下载

1. 编写handle


 1 @RequestMapping("/testResponseEntity")
 2     public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOException{
 3         byte [] body = null;
 4         ServletContext servletContext = session.getServletContext();
 5         InputStream in = servletContext.getResourceAsStream("/files/abc.txt");
 6         body = new byte[in.available()];
 7         in.read(body);
 8         
 9         HttpHeaders headers = new HttpHeaders();
10         headers.add("Content-Disposition", "attachment;filename=abc.txt");
11         
12         HttpStatus statusCode = HttpStatus.OK;
13         
14         ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(body, headers, statusCode);
15         return response;
16     }  

2.在jsp页面发请求


1 <a href="testResponseEntity">Test ResponseEntity</a>  

 三、文件上传

• Spring MVC 为文件上传提供了直接的支持,这种支持是通过即插即用的 MultipartResolver 实现的。Spring 用Jakarta Commons FileUpload技术实现了一个
MultipartResolver 实现类:CommonsMultipartResovler
• Spring MVC 上下文中默认没有装配 MultipartResovler,因此默认情况下不能处理文件的上传工作,如果想使用 Spring 的文件上传功能,需现在上下文中配置 MultipartResolver

1.在pom.xml引入文件上传需要的依赖


 1  <dependency>
 2    <groupId>commons-fileupload</groupId>
 3    <artifactId>commons-fileupload</artifactId>
 4    <version>1.2.1</version>
 5  </dependency>
 6  <dependency>
 7    <groupId>commons-io</groupId>
 8    <artifactId>commons-io</artifactId>
 9    <version>2.0</version>
10  </dependency>  

 

2.springmvc.xml里面配置MultipartResolver

• defaultEncoding: 必须和用户 JSP 的 pageEncoding 属性一致,以便正确解析表单的内容
• 为了让 CommonsMultipartResovler 正确工作,必须先将 Jakarta Commons FileUpload 及 Jakarta Commons io的类包添加到类路径下。


1 <!-- 配置 MultipartResolver -->
2     <bean id="multipartResolver"
3         class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
4         <property name="defaultEncoding" value="UTF-8"></property>
5         <property name="maxUploadSize" value="1024000"></property>    
6     </bean>      

 

3.编写handle


1 @RequestMapping("/testFileUpload")
2     public String testFileUpload(@RequestParam("desc") String desc, 
3             @RequestParam("file") MultipartFile file) throws IOException{
4         System.out.println("desc: " + desc);
5         System.out.println("OriginalFilename: " + file.getOriginalFilename());
6         System.out.println("InputStream: " + file.getInputStream());
7         return "success";
8     }  

 

4.编写index.jsp


1 <form action="testFileUpload" method="POST" enctype="multipart/form-data">
2         File: <input type="file" name="file"/>
3         Desc: <input type="text" name="desc"/>
4         <input type="submit" value="Submit"/>
5   </form>  

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringMVC系列(十一)把后台返回的数据转换成json、文件下载、文件上传 的相关文章

随机推荐

  • css 识别软件测出来的尺寸和代码设置的不一样

    这是我在模仿网页时遇到的问题 xff0c 困扰了一会儿 xff0c 情况是这样的 我下载了参考的网页html文件 xff0c 为了测量某个box的高度 xff0c 用了一款可以截图识别的软件 xff1a 量出来的box高度是30px xff
  • SpringBoot中注入ApplicationContext对象的三种方式

    在项目中 xff0c 我们可能需要手动获取spring中的bean对象 xff0c 这时就需要通过 ApplicationContext 去操作一波了 xff01 1 直接注入 xff08 Autowired xff09 span clas
  • vue中$attrs你会用吗?

    这篇文章的知识点是父子组件通讯 xff0c 如果你了解 props 但是还没了解过 attrs xff0c 那么建议你花1分钟时间阅读 xff0c 了解它的优点 xff0c 并学会在项目中使用 关于 attrs的介绍 包含了父作用域中不作为
  • 企业微信三方应用开发(二)授权开通及登录流程

    何谓企业微信第三方应用 一句话简介 一个S商场 企业微信 里入驻了D商站 xff08 服务商 xff09 在卖他的C产品 xff08 三方应用 xff09 三句话路径 我们申请成为企业微信服务商 xff0c 入驻到企业微信 然后经过 应用开
  • PHP+AJAX实现账号注册和登陆,附可用demo

    前言 登陆和注册已经是网站的标配了 xff0c 所以这是我们web开发学习过程中必学的了 其实很容易实现 xff0c 只需要懂数据库的增删改查 xff0c 还有if else的条件语句即可做出来 目录 css Login Reg css s
  • ftp服务器无法使用浏览器访问解决方法

    浏览器默认工作在被动模式 可能你的环境无法让ftp服务器工作在主动模式 这个很容易测试 你在IE浏览器的工具 internet选项 高级中取消使用被动ftp的设置 xff0c 看看浏览器是否还可以访问ftp服务器 xff0c 如果访问不了
  • Python抓取糗事百科成人版图片

    最近开始学习爬虫 xff0c 一开始看的是静觅 的爬虫系列文章 xff0c 今天看到糗事百科成人版 xff0c 心里就邪恶了一下 xff0c 把图片都爬下来吧 xff0c 哈哈 虽然后来实现了 xff0c 但还是存在一些问题 xff0c 暂
  • vc中调用Com组件的方法详解

    Requirement 1 创建myCom dll 该COM只有一个组件 两个接口IGetRes 方法Hello IGetResEx 方法HelloEx xff1b 2 在工程中导入组件或类型库 import 34 组件所在目录myCom
  • matlab练习程序(二值图像内外边界跟踪)

    目标内边界的像素全都在目标里面 xff0c 目标外边界的像素全都不在目标上 xff0c 是包围着目标的 二值图像内外边界的计算都是有两种方法的 xff0c 所以一共是4种算法 xff0c 不过实际用到跟踪的只有一个而已 首先是内边界跟踪 x
  • 如何使用.NET开发全版本支持的Outlook插件产品(三)——全面控制

    插件项目所有代码都已经上传至 https github com VanPan TestOutlookAdding 进阶基础 COM查看 首先 xff0c 对于Outlook对象模型 xff0c MSDN早就有非常详细的介绍 xff0c 请直
  • Android中应用程序如何获得系统签名权限

    最近在做一个控制电视界面的应用 xff0c 模拟电视遥控器操作 xff0c 代码如下 public static void simulateKeystroke final int KeyCode new Thread new Runnabl
  • 使用PostSharp在.NET平台上实现AOP

    摘要 本文首先介绍AOP xff08 面向方面编程 xff09 的相关概念及理论 xff0c 然后介绍如何使用PostSharp框架在 NET平台上实现AOP xff0c 最后对PostSharp的机制及AOP的优劣进行一个简单的分析 AO
  • python 带头节点的单链表相关函数

    链表用头结点还是头指针让我混乱 在写append函数时 xff0c 发现网上的写法各有不同 xff0c 而带头结点的会更好理解 xff0c 也更简洁 以下是带头结点的单链表一些简单的相关函数 span class token keyword
  • 使用 Beautiful Soup 解析网页内容

    安装Beautiful Soup Beautiful Soup是一个Python的HTML解析框架 xff0c 我们可以利用它方便的处理HTML和XML文档 Beautiful Soup有3和4两个版本 xff0c 目前3已经停止开发 所以
  • ibm服务器报警指示灯含意

    EVENT LOG指示灯报警 有台IBM服务器前面的光通路面板开始亮起了小黄灯 xff0c 推出这个小盒子一看 xff0c 是EVENT LOG指示灯报警 一时不知道是什么原因 xff0c 可能是日志错误 xff0c 要进Configura
  • [概念学习] Virtualization的几个概念

    1 Vitualization xff1a 某种东西的虚拟版本 xff0c 比如硬件平台 操作系统 存储设备 网络资源等 the creation of a virtual version of something such as a ha
  • Windows2012、windows2016配置多用户登录

    windows系统多用户登录配置方法如下 xff0c 但是120天后还是会提示缺少远程桌面授权服务器 xff0c 根本解决办法 xff0c 请参考 xff1a https blog 51cto com 13777088 2299170 服务
  • 全自动迁移数据库的实现 (Fluent NHibernate, Entity Framework Core)

    在开发涉及到数据库的程序时 xff0c 常会遇到一开始设计的结构不能满足需求需要再添加新字段或新表的情况 xff0c 这时就需要进行数据库迁移 实现数据库迁移有很多种办法 xff0c 从手动管理各个版本的ddl脚本 xff0c 到实现自己的
  • VM virtuaBox异常关机启动不了的解决方案

    事件回放 我的物理机是win7 xff0c 上面装了一个 VM virtualBox 用来装 Centos xff0c 有天物理机非正常关闭 xff0c 导致 VM virtuaBox异常关机启动不 了 xff0c 如下 确实找不到这个vm
  • SpringMVC系列(十一)把后台返回的数据转换成json、文件下载、文件上传

    一 后台返回的数据转换成json 1 引入转换json需要的3个依赖 1 lt json转换需要的依赖 begin gt 2 lt dependency gt 3 lt groupId gt com fasterxml jackson co