带有无效xml的Spring请求正文问题

时间:2011-05-26 11:01:08

标签: java string spring rest inputstream

在我们的休息应用程序中,我们使用@RequestBody StreamSorce上传xml文件。问题是xml本身无效或包含一些无效字符,PUT请求在我们的逻辑之前失败(使用http错误请求响应),因此我们无法通知客户端确切的问题。我知道对于requestBody可以使用普通的String,但使用它有意义吗?我想如果我将上传100Mb xml,每个请求将创建具有相同大小的String请求体,并且在使用StreamSource时,我们在需要时读取输入流。

使用String或StreamSource作为请求体有什么缺点和优点。如果我使用StreamSorce,它会扫描整个xml吗?

1 个答案:

答案 0 :(得分:0)

您已经知道StreamSource的内容:in使您无法预处理XML,以防它无效。

使用String:当XML太大时,它将成为性能杀手!永远不要在Java中使用如此大的对象 - 在应用程序服务器的多线程环境中它很容易导致OutOfMemoryError,它会使您的应用程序容易受到 DoS 攻击!

最佳解决方案是将@RequestBody映射为InputStream,并使用 SAX 解析器处理InputStream。内存消耗较低(SAX解析器不在内存中存储XML结构),您可以处理在处理过程中可能抛出的异常。