我希望能够将整个请求写入Spring MVC控制器中的文件.
我已经尝试了以下内容,但即使我正在使用大量参数发出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对象来编写标头和参数的示例:
@RequestMapping(method = RequestMethod.POST, value = "/payments/confirm")
public void receiveCallback(HttpServletRequest request) {
try {
StringBuilder sb = new StringBuilder();
sb.append("Headers:
");
Enumeration headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
Enumeration headers = request.getHeaders(headerName);
while (headers.hasMoreElements()) {
String headerValue = headers.nextElement();
sb.append(headerName).append(':').append(headerValue).append('
');
}
}
sb.append("
Parameters:
");
for(Entry entry: (Set) request.getParameterMap().entrySet(){
sb.append(entry.getKey()).append(':').append(entry.getValue()).append('
');
}
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);
}
}