在我们的rest应用程序中,我们使用@RequestBody StreamSorce上传xml文件。问题是xml本身是无效的,或者包含一些无效的字符,在我们的逻辑之前,PUT请求失败(带有http糟糕的请求响应),所以我们不能告诉客户端确切的问题。我知道只对requestBody使用普通字符串是可能的,但是使用它有意义吗?我猜如果我上传100 100Mb,每个请求都会创建大小相同的字符串请求体,在使用StreamSource时,我们会在需要时读取输入流。
使用String或StreamSource作为请求体的缺点和优点是什么。如果我用StreamSorce做这件事,它会扫描整个xml吗?
发布于 2013-09-24 15:20:47
您已经知道了StreamSource的缺点: in使您无法对XML进行预处理,以防它无效。
使用String:当XML如此庞大时,它将是性能杀手!千万不要在Java中使用这么大的对象--在应用服务器的多线程环境中,它很容易导致OutOfMemoryError,它使您的应用程序容易受到DoS的攻击!
最好的解决方案是将@RequestBody映射为InputStream,并使用SAX解析器处理InputStream。您的内存消耗很低(SAX解析器不将XML结构存储在内存中),并且可以处理处理过程中抛出的异常。
https://stackoverflow.com/questions/6137463
复制相似问题