SpringMVC如何实现下载功能 ResponseEntity与ResponseBody的用法举例

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 ResponseEntity返回json[/caption]

当然您还可以返回xml等格式,大家请自行测试


爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情Blog Img