【问题标题】:MismatchedInputException error Parsing JsonMismatchedInputException错误解析Json
【发布时间】:2021-11-13 18:08:43
【问题描述】:

在 Spring Boot 中,我在尝试解析此 json 时收到 MismatchedInputException 错误

[
 {
"name": "abcd",
"number": "0.11258868"
 },
 {
"name": "try",
"number": "1.155866887"
 },
 {
"name": "test",
"number": "0.123444"
 }
]

我的班级是:

@JsonIgnoreProperties
public class Info {
private String name;
private double number;

public String getName()
{
    return name;
}

public void setName(String name)
{
    this.name = name;
}

public Object getNumber() {
    return number;
}

public void setNumber(double number)
{
    this.number= number;
}

映射代码就是这样:

@GetMapping
public String setInfo()
{
    var info= (List<Info>)m_restTemplate.getForObject(url, Info.class);

    return "test";
}

我知道这是非常简单的代码,但我找不到解决方案。什么与类不匹配?

【问题讨论】:

    标签: json spring-boot parsing runtime-error


    【解决方案1】:

    问题在于检索部分。您将获得Info 的列表,但您对 Spring RestTemplate 说它将获得一个 Info。请尝试以下操作:

    @GetMapping
    public String setInfo() {
        var info = m_restTemplate.exchange(url, HttpMethod.GET, null, 
            new ParameterizedTypeReference<List<Info>>() {}).getBody();
    
        return "test";
    }
    

    【讨论】:

    • 谢谢你实际上解决了错误部分,但名称返回为空。这个方法我没看懂,我去看看。但是在我的代码中,我试图获取 var 声明的信息列表。这意味着我尝试获取单一信息是什么意思?
    • Okey 我解决了我写错误的 setter 方法名称的 null 部分。顺便说一句,它也有效: var info = m_restTemplate.getForObject(url, Info[].class);
    • 请问我应该为这种类型的错误工作什么主题。我的意思是,例如,我无法猜到 Info[].class 部分是问题所在。是反射吗?
    • 问题是getForObject(url, Info.class) 为您提供了一个Info,但您的JSON 有一个Info 列表。这就是getForObject(url, Info[].class) 起作用的原因,因为现在它能够将 JSON 解析为 Info 的 Arrya。仔细阅读文档并查看一些示例(baeldung.com 通常是一个不错的起点)。
    猜你喜欢
    • 1970-01-01
    • 2020-05-30
    • 2021-01-25
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多