如何修改Spring控制器以防止下载未更改的文件

时间:2015-12-07 20:22:57

标签: spring rest http-status-code-304

我有一个类似于this one的实现,它允许调用者从文件系统中请求一个特定的文件。该文件不会经常更改,并且正由移动应用程序下载。有没有办法我可以改变它使用304 - 未修改的HTTP状态代码,以便客户端在没有更改时不必下载文件?如果是这样,此方法的接口是否必须以某种方式更改以接受日期?有没有一些标准的方法来实现这个?

@RequestMapping(value = "/files/datafile", method = RequestMethod.GET)
public void getDataFile(HttpServletResponse response) {
    try {
      // get your file as InputStream
      InputStream is = ...;
      // copy it to response's OutputStream
      org.apache.commons.io.IOUtils.copy(is, response.getOutputStream());
      response.flushBuffer();
    } catch (IOException ex) {
      log.info("Error writing file to output stream. Filename was '{}'", fileName, ex);
      throw new RuntimeException("IOError writing file to output stream");
    }

}

1 个答案:

答案 0 :(得分:0)

使用Springs ETag Header支持。

您只需将此过滤器添加到您的web.xml

即可
<filter>
    <filter-name>etagFilter</filter-name>
    <filter-class>org.springframework.web.filter.ShallowEtagHeaderFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>etagFilter</filter-name>
    <servlet-name>petclinic</servlet-name>
</filter-mapping>

或者你在控制器中做得更复杂: