Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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 jsonobject“;“价值”;及;num";_Java_Json_Jsonobject - Fatal编程技术网

java jsonobject“;“价值”;及;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

使用javax json ObjectBuilder构建json时,输出json字符串中包含“value”和“num”。当json包含“value”和“num”时,我的web服务抛出序列化错误。有人知道为什么输出有“value”和“num”吗

例如:

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类型。因此,它可以直接编写它,而不必进一步序列化它


这类似于我在这里回答的一个问题:


您正在序列化什么?向我们展示POJO和代码。使用代码更新。没有POCO,只使用构建器。从哪里获得结果
字符串
值?或者如何输出由rest assured log输出的结果字符串。您必须检查rest assured是如何记录它的。调用
addProductRequest.toString()
为我返回预期的json
String
值,使用
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
}