Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.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 将JSON字符串映射到POJO列表会给出空值_Java_Json_Jackson_Mapper - Fatal编程技术网

Java 将JSON字符串映射到POJO列表会给出空值

Java 将JSON字符串映射到POJO列表会给出空值,java,json,jackson,mapper,Java,Json,Jackson,Mapper,我从RESTAPI获取json,我想将数据存储在POJO列表中。以下是相同的代码: public List<myObject> mapper(){ String myObjectData= restClient.getAllOriginal("myObject"); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(Deserialization

我从RESTAPI获取json,我想将数据存储在POJO列表中。以下是相同的代码:

public List<myObject> mapper(){

    String myObjectData= restClient.getAllOriginal("myObject");

    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    objectMapper.configure(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);

    CollectionType typeReference =
            TypeFactory.defaultInstance().constructCollectionType(List.class, myObject.class);
    List<CommitmentPojo> resultDto = null;

    try
    {

         resultDto = objectMapper.readValue(myObjectData, typeReference);
        
    }
    catch (JsonParseException e)
    {
        e.printStackTrace();
    }
    catch (JsonMappingException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return resultDto;
}
这来自CollectionDeserializer.handleNonArray方法

从rest api获取字符串的方法:

public  String getAllOriginal(String resourcePath) {
       // Objects.requireNonNull(this.baseUri, "target cannot be null");
        return this.client
                .target("http://comtsrvc.ny.qa.flx.nimbus.gs.com:3802/v2/")
                .path(resourcePath)
                .request(MediaType.APPLICATION_JSON_TYPE)
                .cookie("GSSSO", getCookie())
                .get()
                .readEntity(String.class);
    }
以下是我的json:

{
  
  "myObject" : [ {
    "key" : {
      "srcSys" : "REPO_1",
      "srcSysRef" : "20200909_1911_1"
    },
    "productData" : {
      "id" : null,
      "number" : null,
      "isn" : null,
      "productId" : null,
      "productAdditionalData" : {
        "assetClassTree" : "UNCLASSIFIED",
        "description" : "UNCLASSIFIED",
        "productTypeData" : {
          "productType" : "UNCLASSIFIED",
          "productGroup" : "UNCLASSIFIED"
        }
      }
    },
    "state" : "OPEN",
    "type" : "01"
  }, {
    "key" : {
      "srcSys" : "REPO_2",
      "srcSysRef" : "20200403_3892_1"
    },
    "productData" : {
      "id" : "1",
      "number" : "11",
      "isn" : "null",
      "productId" : 1234,
      "productAdditionalData" : {
        "assetClassTree" : "xyz",
        "description" : "abc",
        "productTypeData" : {
          "productType" : "UNCLASSIFIED",
          "productGroup" : "UNCLASSIFIED"
        }
      }
    },
    "state" : "OPEN",
    "tradAcctType" : "01"
  } ]
  }

问题是:所有值都是空的,列表的大小为1。请告诉我我的代码有什么问题。

尝试将其反序列化为
映射:

import com.fasterxml.jackson.core.type.TypeReference;

...

Map<String, List<MyObject>> root = mapper.readValue(jsonFile, new TypeReference<Map<String, List<MyObject>>>() {});
List<MyObject> objects = root.get("myObject");
import com.fasterxml.jackson.core.type.TypeReference;
...
Map root=mapper.readValue(jsonFile,new-TypeReference(){});
List objects=root.get(“myObject”);

因此,不需要为根级别创建新的
POJO
<代码>映射
也会起作用。

您的对象列表由额外的对象包装。您可以将其反序列化为
List
-s:
new TypeReference(){}
Map
,或者您可以使用
List myObject
属性创建一个新的Pojo。'm绑定有Pojo列表。还有其他方法吗,比如不创建新的Pojo?如果没有,请告诉我,如果我在Pojo中添加属性,如何使用
List myObject
属性。我尝试摆脱类型引用,并尝试使用如下JavaType:
JavaType JavaType=objectMapper.getTypeFactory().ConstructionType(List.class,CommitmentPojo.class);resultDto=objectMapper.readValue(commitmentsData,javaType)但是列表仍然显示为空值这真的很有帮助!但我被困在了一个点上,我必须读取数组格式的日期,例如[2020,9,22],我遇到了异常:
org.codehaus.jackson.map.JsonMappingException:无法在[Source:java.io]处反序列化java.lang.Integer的实例。StringReader@8a98f38;第31行,第31列](通过参考链:myObjectPojo[“startDate”])
@shweta,请创建一个包含所有详细信息的新问题:示例
JSON
POJO
类等。您能对此提出建议吗
import com.fasterxml.jackson.core.type.TypeReference;

...

Map<String, List<MyObject>> root = mapper.readValue(jsonFile, new TypeReference<Map<String, List<MyObject>>>() {});
List<MyObject> objects = root.get("myObject");