没有用于从字符串值反序列化的字符串参数构造函数/工厂方法-从restTemplate反序列化json对象时发生异常

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

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

[
    {
        "name": "john doe",
        "age": "24",
        "address": "{\"state\":\"LA\",\"country\":\"US\"}"
    }
]

型号:

Person.java

@Data
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true) 
public class Person {
    private String name;
    private String age;
    private Address address;
}

地址.java

@Data
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true) 
public class Address {
    private String state;
    private String country;
}

读取此数据的代码,

ResponseEntity<List<Person>> response = restTemplate.exchange(builder.toUriString(), HttpMethod.GET,requestEntity,new ParameterizedTypeReference<List<Person>>() {});

但是我低于例外,

在提取类型为[java.util.List<com.bp.ascssubmission.model.Person>]和内容类型为[application / json; charset = UTF-8]的响应时调用ABS ServiceError时发生RestClientException;嵌套的异常是org.springframework.http.converter.HttpMessageNotReadableException:JSON解析错误:无法构造com.bp.model.Address的实例(尽管存在至少一个Creator):没有从字符串值反序列化的字符串参数构造函数/工厂方法('{ state“:” LA“,” country“:” US“}');嵌套异常是com.fasterxml.jackson.databind.exc.MismatchedInputException:无法构造com.bp.model.Address的实例(尽管存在至少一个Creator):没有用于从字符串值反序列化的字符串参数构造函数/工厂方法(“ {”状态” :“ IN”,“ brand”:“ anthem”}')在[来源:(PushbackInputStream);行:1,列:325](通过参考链:java.util.ArrayList [0]-> com.bp.model.Person [“ address”])

java json jackson deserialization resttemplate
1个回答
0
投票

代码正确,但是JSON存在问题。地址是一个字符串,而不是JSON对象。要使其正常工作,它必须类似于:

"address": {"state": "LA", "country": "US"}

没有外引号和转义字符。

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