xml - 使用 XML 内容作为请求正文时,如何防止 REST Assured 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>
我需要获取请求的整个正文(包括声明标签)。但是由于某种原因,它在到达请求正文时被丢弃。有人可以告诉我为什么以及克服这个问题的方法吗?非常感谢您的反馈。谢谢你。
解决方案
通过对此进行一些研究,我发现 XML 声明标记因请求中使用的内容类型(文本/xml)而被删除。这个关于application/xml 和 text/xml 之间区别的链接清楚而简单地解释了这一点。
引用链接,
“根据标准,text/*-MIME 类型具有 us-ascii 字符集,除非在 HTTP 标头中另有指定。这实际上意味着忽略 XML 序言中定义的任何编码。这当然不是预期和期望的行为。”
推荐阅读
- python - 将捆绑产品的交易行分成多行单独的产品
- html - 当浏览器尺寸太小时,模态会超出浏览器
- python - 为什么此代码报告功能对象不可编写脚本
- python-3.x - 如果使用 Python 满足条件,则触发电子邮件
- r - R包bnlearn:cpquery vs predict - 不同的结果?
- python - Python 3.5 CSV.reader 不返回任何行
- azure - Azure API Management 多区域部署和多区域后端服务
- c# - 我无法在下面的语句中访问 str obj 来连接。为什么?
- python - 我无法识别简历标签并上传简历
- android - 使用 Android 的 BROTHER SDK 通过 WIFI 打印时出现 ERROR_WRONG_LABEL