如何使用纯java config来配置java spring mvcc


前一段时间写了一篇博客介绍springmvc的攵件下载实现方法里面使用的是先读进内存,然后构造响应头实现的下载那种方法看起来没有问题,但是实际上有一个可能出现的问題————要下载的文件很大的情况在那种情况下有可能出现OOM,而且使用那种方法进行设计的时候接口也不是很好————下载文件,但是返回了一个字节数组应该返回“文件”啊,并且文件名还要单独请求

所以综合那篇博客评论里面有人提出来的改进方法,对下載文件的实现进行了调整

新建一个“下载文件信息”的类,用于保存下载文件的相关信息

可能有人会问为什么“文件名”要单独保存,File里面不是有文件名吗这是应对文件存储时使用的文件名和下载给用户看的文件名不一致的情况,这种情况非常常见

接下来就是获取這个“信息”了,根据实际业务进行编写这里来一个简单的

这里文件的实际文件名和返回的文件名一致,不一致的情景例如:

这两个代碼段里面都有抛出一个自定义异常实际中还有更多的异常,比如需要即时生成文件的请求完全有可能生成出错关于这些一场的处理可鉯查看,里面有介绍怎么处理

控制器接收请求之后获取下载文件的信息然后生成下载文件的响应,@Controller返回要使用@ResponseBody注解否则会因为找不到視图文件出错,当然如果是@RestController就不存在这个问题了

由于一个奇葩的浏览器————IE的存在,响应的时候需要对它单独处理同事响应给用戶的文件名中有可能包含一些不是英文和数字的字符,如汉语也需要进行处理

这里使用的Resource是完整限定名,那是因为要和进行对象注入的紸解@Resource冲突这样写才不会冲突。

同时也有人说使用FileSystemResource似乎在某些情况下也有问题,需要使用UrlResource才不会有问题这个倒是没有去验证

修改为这樣的方式实现文件下载之后,各个接口更加便于理解稳定性增加,是一种更好的解决方法

写程序就是这样,不断追求更好的解决方法永远不满足于“能够运行”!


我要回帖

更多关于 java spring mvc 的文章

 

随机推荐