当前位置: 首页 > 知识库问答 >
问题:

从restTemplate反序列化json对象时,没有可从String值反序列化的String-argument构造函数/工厂方法-异常

高高雅
2023-03-14

在调用检索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 ] 和内容类型[application/json;charset=utf-8]的响应时调用ABS ServiceError时的RestClientException;嵌套异常为org.springframework.http.converter.httpmessagenotreadableException:JSON分析错误:无法构造com.bp.model.address的实例(尽管至少存在一个创建者):没有可从字符串值反序列化的字符串参数构造函数/工厂方法(“{”state“:”la“,”country“:”us“}”);嵌套异常为com.fasterxml.jackson.databind.exc.MismatchedInputException:无法构造com.bp.model.address的实例(尽管至少存在一个创建者):没有字符串参数构造函数/工厂方法可从[source:(PushbackInputStream);行:1,列:325](通过引用链:java.util.ArrayList[0]->com.bp.model.person[“address”])处的字符串值(“{”state“:”in“,”brand“:”anthem“}”)反序列化

共有1个答案

汪丁雷
2023-03-14

代码是正确的,但JSON有一个问题。地址是一个字符串,而不是一个JSON对象。要使其发挥作用,它需要这样做:

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

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

 类似资料: