没有字符串参数构造函数/工厂方法来从字符串值反序列化 - 从 RestTemplate 反序列化 json 对象时出现异常

Sri*_*m G 15 java json jackson deserialization resttemplate

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

[
    {
        "name": "john doe",
        "age": "24",
        "address": "{\"state\":\"LA\",\"country\":\"US\"}"
    }
]
Run Code Online (Sandbox Code Playgroud)

楷模:

人.java

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

地址.java

@Data
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true) 
public class Address {
    private String state;
    private String country;
}
Run Code Online (Sandbox Code Playgroud)

读取此数据的代码,

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

但是我遇到以下异常,

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

rph*_*rph 16

代码是正确的,但 JSON 有问题。地址是字符串而不是 JSON 对象。为了让它发挥作用,它需要类似于:

"address": {"state": "LA", "country": "US"}
Run Code Online (Sandbox Code Playgroud)

没有外部引号和转义字符。