2018-01-25

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 ResponseEntitydownload(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(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(s,HttpStatus.OK);

您还可以返回json,如下代码片段

HttpHeaders headers = new HttpHeaders();

headers.setContentType(MediaType.APPLICATION_JSON);

String s = "{'ss':'bb'}";

return new ResponseEntity(s,headers,HttpStatus.OK);

ResponseEntity返回json

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

你可能感兴趣的:(2018-01-25)