SpringMVC如何实现下载功能 ResponseEntity与ResponseBody的用法举例
昨天一大神向我问起这个问题,由于时间太忙,然后今天看了下以前的demo,所以现在把SpringMVC下载文件的方法分享给大家吧
ResponseBody 注解我们都知道,他是向前端返回数据的
他的一般用法如下
@RequestMapping(value="/showsetgroup", produces="application/json;charset=UTF-8") public @ResponseBody String adsethbgroup(){ return hongbao.showhsethbSelect("select"); }以上代码是返回的json字符串,就是说return返回的是一个json字符串
如果需要返回json字符串,那么需要在@RequestMapping里面设置produces的属性为 application/json;charset=UTF-8
UTF-8是为了不乱码,请根据你的实际情况修改
如果我们不添加produces属性,那么返回的字符串数据就是一般格式的数据
在进行ajax获取返回值时,如返回的是json格式,那么dataType的值就是json
如果返回的是普通文本,那dataType的值就是text
ResponseEntity我们一般用来处理文件下载
他也可以返回字符串,也可以返回json,或xml等
我们这里主要说说如何使用ResponseEntity来处理文件的下载
使用ResponseEntity处理文件的下载只需要几步
第一:获得文件
第二:将文件转换为二进制
第三:设置HttpHeaders的一些基本属性
请看如下代码
@RequestMapping("/download") public ResponseEntity<byte[]> download(String filename) throws IOException{ //将文件转换为二进制文件 File file = new File(EnumPath.webinf.getClassPath()+EnumPath.updatepath.getClassPath()+filename); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); headers.setContentDispositionFormData("attachment", filename); return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED); }注意返回的是ResponseEntity而不是注解ResponseEntity,我们可以通过查看源码发现ResponseEntity这个类是一个,并且继承了HttpEntity类
泛型byte[]表示二进制文件
我们首先创建了一个文件对象 file,创建File文件对象,我想您应该懂吧!
然后我们设置了HttpHeaders,设置了他的类型和名字,注意filename是我们需要下载文件的名字,同时他也作为下载文件的名字,这个名字您在下载时是可以改的
也就是说以上代码的URL请求地址可以是这样
http://localhost:8080/LoveBN/download?filename=111.rar
然后我们返回的是一个ResponseEntity对象,通过他的构造函数获得这个对象
上面的代码您可以设置headers的setContentLength值,他的大小必须小于或等于当前需要下载的文件大小,一般这个参数无需设置
注意ResponseEntity的泛型
他可以是String类型
如果是String类型,那您可以通过ResponseEntity的另一个构造函数返回这个字符串,如下代码片段
String s = "fsdfsdfsd"; return new ResponseEntity<String>(s,HttpStatus.OK);您还可以返回json,如下代码片段
HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); String s = "{'ss':'bb'}"; return new ResponseEntity<String>(s,headers,HttpStatus.OK);
[caption id="attachment_1602" align="alignnone" width="342"] ResponseEntity返回json[/caption]
当然您还可以返回xml等格式,大家请自行测试
爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情