在重构项目中的一些方法之前,我正在为jersey 2-0webservice(json)编写一些验收测试,我偶然发现了一个从webserviceAssert空白字符串的问题。
我从Web服务中获得以下输出:
"Boxes": [
{
"id": 1,
"title": " ", //Yes this is a white-space
"genre": "genre",
"info": "some info",
"rating": "3",
"artist": "Artist 1"
}
],
我将Web服务对jsonobject的响应转换为:
public static JSONObject responseToJsonObject(HttpResponse httpResponse) throws IOException {
String responseString = EntityUtils.toString(httpResponse.getEntity(), "UTF-8");
return new JSONObject(responseString);
}
那么在我的测试中,正常的Assert是这样的:
//* http request creation omitted *//
JSONObject jsonResponse = JsonTranslator.responseToJsonObject(httpRequest)
JSONArray boxes = jsonResponse.getJSONArray("boxes ");
JSONObject result = boxes .getJSONObject(0);
assertEquals(" ", result.getString("title"));
问题是最后一个Assert失败了。
org.junit.ComparisonFailure:
Expected :
Actual :
我可能知道为什么字节数组会产生两种不同的结果。一个有一个字节 [32]
(一个是用java创建的)和一个来自webservice的 [-62,-96]
我以前从未遇到过这个问题。如果我试图在没有 "UTF-8"
在 EntityUtils
方法我得到了更糟糕的结果( Â
字节数组: [-61,-126,-62,-96]
我可以看到我的网络服务 content-type
标题正确设置为 application/json
有人能解释一下这里发生了什么吗?
1条答案
按热度按时间brgchamk1#
你得到的角色不是一个“正常”的空间。这是一个不间断的空间。与html中描述的字符相同
.其unicode值为
'\u00A0'
. 它的utf-8表示是C2 A0
,这就是您在字节数组中得到的内容。我相信如果你尝试以下Assert,它会起作用: