SpringMVC获取response的方法

本文介绍了一种简化Spring MVC项目中获取HttpServletResponse的方法,通过在基类中定义getResponse()方法实现跨控制器复用,适用于Spring 4.2.4及以上版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目中要获取response,在之前的方法都是如下方式获取:

public void manageHome(HttpServletRequest request,HttpServletResponse response)

但是每次都是用这种,不太方便。也不太好看。
我们可以包装一个方法,放在父类里。然后每个cotroller都继承这个父类。在父类中定义getResponse();方法,这样我们就能在想要的时候就使用getResponse();

public HttpServletResponse getResponse(){
        return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
    }

但是注意了,ServletRequestAttributes类获取response方法只在高版本的spring中支持。具体是从哪个版本开始支持的我不清楚,但是我在4.2.4版本中可用。在3.2.0版本中不能使用。所以需要使用的小伙伴就下载最新的版本即可。

以下是使用 Spring MVC 下载文件的示例代码: ```java @RequestMapping(value = "/download") public void downloadFile(HttpServletResponse response) throws IOException { // 获取文件路径 String filePath = "path/to/file"; File file = new File(filePath); // 设置响应头 response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=" + file.getName()); response.setHeader("Content-Length", String.valueOf(file.length())); // 读取文件并写入响应流 try (InputStream inputStream = new BufferedInputStream(new FileInputStream(file))) { byte[] buffer = new byte[1024]; int len; while ((len = inputStream.read(buffer)) > 0) { response.getOutputStream().write(buffer, 0, len); } response.flushBuffer(); } } ``` 在上面的代码中,`@RequestMapping` 注解用于指定该方法对应的 URL 地址。在本例中,我们将其指定为 `/download`。当用户访问 `/download` 时,该方法会被调用。 接下来,我们获取要下载的文件路径,并使用 `File` 类创建一个 `File` 对象。 然后,我们设置响应头,包括文件类型、文件名和文件大小。 最后,我们使用 `FileInputStream` 读取文件,并将文件内容写入响应流。需要注意的是,在写入文件内容之后,我们需要调用 `response.flushBuffer()` 方法来刷新响应流。这样做可以确保所有数据都被写入响应流中。 值得一提的是,上述代码中使用了 try-with-resources 语句,这样可以确保 `InputStream` 在使用完毕后被正确关闭。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值