Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用无效xml的Spring请求正文问题_Java_String_Spring_Rest_Inputstream - Fatal编程技术网

Java 使用无效xml的Spring请求正文问题

Java 使用无效xml的Spring请求正文问题,java,string,spring,rest,inputstream,Java,String,Spring,Rest,Inputstream,在rest应用程序中,我们使用@RequestBody StreamSorce上传xml文件。问题是xml本身无效或包含一些无效字符,PUT请求失败,http错误请求响应先于我们的逻辑,因此我们无法将确切问题通知客户端。我知道对requestBody只使用普通字符串是可能的,但使用它有意义吗?我想如果我上传100Mb的xml,每个请求都会创建相同大小的字符串请求体,并且在使用StreamSource时,我们在需要时读取输入流 使用String或StreamSource作为requestbody的

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


使用String或StreamSource作为requestbody的优缺点是什么。如果我使用StreamSorce,它会扫描整个xml吗

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

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


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

您所说的是哪种无效字符?如果XML格式不正确,它会失败吗?