当使用 XML 内容作为请求正文时,如何防止 REST 放心 POST 请求丢弃 XML 声明标记?



我使用 REST Assured 来测试将 XML 文件上传到数据库。后端代码写得很好,没有错误。我像这样使用 REST Assured 构建请求(.body(( 方法来自 REST Assured 的 RequestSpecification 类,它扩展了 RequestSender 类(。

response = TestSuite.buildRequest()
.contentType("text/xml")
.header("header1")
.accept("application/json")
.body(uploadPayload)
.post(uploadPath)

uploadPayload 是带有 XML 声明标记的 XML 文件内容。下面是一个示例文件内容,

<?xml version="1.0" encoding="UTF-8" ?>
<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
</CATALOG>

此内容是从项目目录中的文件读取的,这是我用来读取此文件内容的方法,它以所有格式读取整个文件。

public static String getFileContent(File file) {
if (file == null) return
String s = ""
try {
FileReader reader = new FileReader(file)
BufferedReader br = new BufferedReader(reader)
String line
while ((line = br.readLine()) != null) {
s = s + line + "n"
}
return s
} catch (IOException e) {
throw new IOException("Error getting file content from file.", e)
}
}

我所做的是将此获得的文件内容添加为请求正文(上述请求的 uploadPath 变量(并发送请求。但是,当执行测试时,正文将显示在结果中,而不使用 XML 声明标记。但是当我打印内容时,标签就在那里。这就是正文在测试结果中的显示方式(没有 XML 声明标记(。

<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
</CATALOG>

我需要获取请求的整个正文(包括声明标签(。但是由于某种原因,它在将其发送到请求正文时会被删除。有人可以告诉我为什么以及克服这个问题的方法吗?非常感谢您的反馈。谢谢。

通过对此进行一些研究,我发现由于请求中使用的内容类型(text/xml(而删除了XML声明标记。这个关于应用程序/xml和文本/xml之间区别的链接清楚地解释了这一点。

引用链接,

"根据标准,text/*-MIME类型具有us-ascii字符集,除非在HTTP标头中另有指定。这实际上意味着 XML prolog 中定义的任何编码都将被忽略。这当然不是预期和期望的行为。

最新更新