java - 在 Spring MVC 中将请求写入文件

标签 java spring servlets spring-mvc

我希望能够将整个请求写入 Spring MVC Controller 中的文件。

我尝试了以下方法,但即使我正在发出带有大量参数的 POST 请求,文件始终为空:

    @RequestMapping(method = RequestMethod.POST, value = "/payments/confirm")
public void receiveCallback(ServletInputStream inputStream)
{
    try
    {
        inputStream.reset();
        byte[] data = IOUtils.toByteArray(inputStream);

        File file = new File(System.getProperty("java.io.tmpdir") + "test" + System.currentTimeMillis() + ".txt");
        FileOutputStream fos = new FileOutputStream(file);
        fos.write(data);
        fos.close();
    }
    catch (Exception e)
    {
        logger.error("Error writing request", e);
    }
}

我也尝试过使用 HttpServletRequest.getInputStream(),但结果相同。

最佳答案

使用 InputStream 是行不通的(参见 BalusC 的回答)。下面是一个示例,说明如何使用 HTTPServletRequest 对象来代替编写 header 和参数:

@RequestMapping(method = RequestMethod.POST, value = "/payments/confirm")
public void receiveCallback(HttpServletRequest request) {
    try {
        StringBuilder sb = new StringBuilder();
        sb.append("Headers:\n");
        Enumeration<String> headerNames = request.getHeaderNames();
        while (headerNames.hasMoreElements()) {
            String headerName = headerNames.nextElement();
            Enumeration<String> headers = request.getHeaders(headerName);
            while (headers.hasMoreElements()) {
                String headerValue = headers.nextElement();
                sb.append(headerName).append(':').append(headerValue).append('\n');
            }
        }
        sb.append("\nParameters:\n");
        for(Entry entry: (Set<Entry>) request.getParameterMap().entrySet(){
            sb.append(entry.getKey()).append(':').append(entry.getValue()).append('\n');
        }
        byte[] data = sb.toString().getBytes();

        File file = new File(System.getProperty("java.io.tmpdir") + "test"
                + System.currentTimeMillis() + ".txt");
        FileOutputStream fos = new FileOutputStream(file);
        fos.write(data);
        fos.close();
    } catch (Exception e) {
        logger.error("Error writing request", e);
    }
}

关于java - 在 Spring MVC 中将请求写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6856415/

相关文章:

JSP 中未调用 Javascript 函数

java - 解决[org.springframework.http.converter.HttpMessageNotReadableException:Java Spring启动应用程序中缺少必需的请求正文

java - 设置 EditText 以接受 double 值的问题

regex - 在数组中使用正则表达式进行 Spring data mongo 查询

java - 为什么我的网络应用程序在 tomcat/bin 而不是在 webapps 中寻找所需的文件?

java - 在 tomcat servlet 中检测客户端断开连接?

java - 无法从 object 转换为int

java - 如何安全地存储外部服务的凭据

java - 如何在 Spring Boot 应用程序中配置 DispatcherServlet?

java - 为什么在以下代码中 Filter Servlet 中捕获二进制数据失败?