java jsonobject“;“价值”;及;num";
使用javax json ObjectBuilder构建json时,输出json字符串中包含“value”和“num”。当json包含“value”和“num”时,我的web服务抛出序列化错误。有人知道为什么输出有“value”和“num”吗 例如:java jsonobject“;“价值”;及;num";,java,json,jsonobject,Java,Json,Jsonobject,使用javax json ObjectBuilder构建json时,输出json字符串中包含“value”和“num”。当json包含“value”和“num”时,我的web服务抛出序列化错误。有人知道为什么输出有“value”和“num”吗 例如: JsonObject addProductRequest = Json.createObjectBuilder() .add("OrderID", orderId) .add("Product", p
JsonObject addProductRequest = Json.createObjectBuilder()
.add("OrderID", orderId)
.add("Product", productId)
.add("Quantity", qty)
.add("access_token", access_token)
.build();
输出:
{
"OrderID": {
"num": 15498
},
"ProductID": {
"num": 20
},
"Quantity": {
"num": 1
},
"access_token": {
"value": "1f6c689d-6956-4f8e-b259-9030d57bec4b"
}
}
当我切换到使用google.gson.JsonObject时,输出没有“value”和“num”字符串,我的web服务接受这些字符串,而且一切似乎都正常工作。
范例
输出:
{ "OrderID": 15499, "Product": 20, "Quantity": 1, "access_token": "3241cfd4-7b6c-4eac-b2bb-9b2b0c780831"}
Rest Assured似乎使用Gson将POJO(您应该将其用作响应实体)序列化到响应体 Gson对
javax.json
一无所知。您正在使用的javax.json
的实现对于其JsonObject
基本上具有以下格式:
private static final class JsonObjectImpl extends AbstractMap<String, JsonValue> implements JsonObject {
private final Map<String, JsonValue> valueMap; // unmodifiable
其中,valueMap
包含您在构建器中使用add
添加的所有值。比如说,
.add("OrderID", 1)
它将添加一个带有String
键OrderID
和JsonValue
值的条目
// Optimized JsonNumber impl for int numbers.
private static final class JsonIntNumber extends JsonNumberImpl {
private final int num;
请注意num
字段
因此,Gson现在将看到这个JsonIntNumber
类型的值。它将其视为POJO,因此将其序列化为JSON对象,并将其字段作为键值对。因此,它产生
{
"num": 15498
}
com.google.gson.JsonObject
是gson
的已知类型。它知道它是特殊的,而不是定制的POJO类型。因此,它可以直接编写它,而不必进一步序列化它
这类似于我在这里回答的一个问题:
字符串值?或者如何输出由rest assured log输出的结果字符串。您必须检查rest assured是如何记录它的。调用addProductRequest.toString()
为我返回预期的jsonString
值,使用javax.json
的glassfish 1.0.4实现。谢谢。这就解释了。
// Optimized JsonNumber impl for int numbers.
private static final class JsonIntNumber extends JsonNumberImpl {
private final int num;
{
"num": 15498
}