簡體   English   中英

將Json字符串轉換為Java對象會給出null(null)

[英]Convert Json string to Java object gives null (null)

您好,我得到了這個Json字串

{"NexusResource":{"resourceURI":"http://nexus.ad.hrm.se/nexus/service/local/repositories/snapshots/content/se/hrmsoftware/hrm/hrm-release/16.1-SNAPSHOT/","relativePath":"/se/hrmsoftware/hrm/hrm-release/16.1-SNAPSHOT/","text":"16.1-SNAPSHOT","leaf":false,"lastModified":"2018-04-09 12:23:59.0 UTC","sizeOnDisk":-1}}

我想將其轉換為名為NexusResource的類的對象,如下所示

public class NexusResource {
@JsonProperty("resourceURI") private String resourceURI;
@JsonProperty("relativePath") private String relativePath;
@JsonProperty("text") private String text;
@JsonProperty("leaf") private Boolean leaf;
@JsonProperty("lastModified") private String lastModified;
@JsonProperty("sizeOnDisk") private Integer sizeOnDisk;
@JsonIgnore private Map<String, Object> additionalProperties = new HashMap<>();
}

我嘗試使用ObjectMapper進行轉換

 ObjectMapper mapper = new ObjectMapper();
    NexusResource resource = mapper.readValue(version, NexusResource.class);

版本是Json字符串,但是當我記錄資源時,即使版本獲取了所有數據,我得到的還是null(空)。

您可以將ObjectMapper配置為解包根值,以便反序列化到POJO中。

例如:

mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);

參見API

您也可以通過修改POJO來解決此問題(請參閱Karol的答案)。

不選擇其中任何一個都將導致com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException拋出,並顯示消息: Unrecognized field "NexusResource"

NexusResource不是JSON的根,而是密鑰。 為了使Java映射正常工作,您應該定義包裝類型:

public class NexusResources {
  @JsonProperty("NexusResource") private NexusResource root;
  ...
}

然后用它來映射:

ObjectMapper mapper = new ObjectMapper();
NexusResources root = mapper.readValue(version, NexusResources.class);
NexusResource resource = root.getRoot();

問題是JSON與您嘗試解析的類不匹配。 請注意,JSON有一個名為“ NexusResource”的字段,其中包含所有其他字段。 NexusResource.class類僅具有字段。 您可以做兩件事。 更改JSON以匹配NexusResource.class,或創建一個與JSON匹配的新類。

1)將json更改為以下內容。

{"resourceURI":"http://nexus.ad.hrm.se/nexus/service/local/repositories/snapshots/content/se/hrmsoftware/hrm/hrm-release/16.1-SNAPSHOT/","relativePath":"/se/hrmsoftware/hrm/hrm-release/16.1-SNAPSHOT/","text":"16.1-SNAPSHOT","leaf":false,"lastModified":"2018-04-09 12:23:59.0 UTC","sizeOnDisk":-1}

2)創建與您的Json實際匹配的新類。

class NexusResourceJson {

    @JsonProperty("NexusResource ")
    NexusResource resource;

    public NexusResource getResource() {return resource;}
}


ObjectMapper mapper = new ObjectMapper();
NexusResource resource = mapper.readValue(version, NexusResourceJson.class).getResource();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM