ObjectMapper - 没有从字符串值反序列化的字符串参数构造函数/工厂方法

问题描述 投票:0回答:1

调用检索 json 响应并解析它时遇到问题。

ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false).configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true);

mapper.convertValue(respDataString, GetListingListResponse.class);

respDataString 在哪里

{
    "status": "OK",
    "branch_reference": "148644",
    "listings": []
}

GetListingListResponse.java

@Data
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
        "status",
        "branch_reference",
        "listings"
})
public class GetListingListResponse implements Serializable
{

    @JsonProperty("status")
    private String status;
    @JsonProperty("branch_reference")
    private String branchReference;
    @JsonProperty("listings")
    private List<Listing> listings;

}

Listing.java

@Data
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
        "listing_etag",
        "listing_reference",
        "url"
})
public class Listing implements Serializable
{

    @JsonProperty("listing_etag")
    private String listingEtag;
    @JsonProperty("listing_reference")
    private String listingReference;
    @JsonProperty("url")
    private String url;

}

异常

(尽管至少存在一个 Creator):没有字符串参数构造函数/工厂方法可从字符串值反序列化('{"status":"OK","branch_reference":"148644","listings":[]}' ) 在 [来源:未知;行:-1,列:-1] 在 com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63) 在 com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1455) 在 com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1081) 在 com.fasterxml.jackson.databind.deser.ValueInstantiator._createFromStringFallbacks(ValueInstantiator.java:371) 在 com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.createFromString(StdValueInstantiator.java:323) 在 com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromString(BeanDeserializerBase.java:1408) 在 com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:176) 在 com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:166) 在 com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:4229) 在 com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:4165)

我对此一无所知。有什么问题吗?

java json jackson objectmapper
1个回答
0
投票

不清楚为什么要使用方法

ObjectMapper.convertValue(Object fromValue, Class<T> toValueType)
。该方法基本上将第一个参数序列化为 JSON,然后将其反序列化回
toValueType
类型。 JavaDoc 在这里.

您可能想要的是

ObjectMapper.readValue(String content, Class<T> valueType)
它将 JSON 的输入
String
反序列化为指定类型。

© www.soinside.com 2019 - 2024. All rights reserved.