无法从数组值(标记“JsonToken.START_ARRAY”)反序列化“...”类型的值

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

我的问题是,我正在尝试显示 API 端点,但始终遇到错误。我是个新手,完全不知道如何构建我的代码来解决问题。

我的错误

提取类型 [class com.jokeapi.jokeDemo.domain.jokeResponse] 和内容类型 [application/json;charset=utf-8]] 的响应时出错,根本原因为 com.fasterxml.jackson.databind.exc.MismatchedInputException:无法从数组值(标记

com.jokeapi.jokeDemo.domain.jokeResponse
 反序列化类型 
JsonToken.START_ARRAY

的值

我正在使用 Spring Boot,并且一直在遵循连接 API 端点的教程

在我的 Spring Boot 类中,它的 setter 和 getter 看起来像这样。这对于以键值对形式返回对象的其他 API 端点来说效果很好

@Getter
@Setter
public class jokeResponse {
    private Long id;
    private String type;
    private String setup;
    private String punchline;
}

作为示例,我可以返回 jokeResponse 类中对象的 JSON 端点:

{
id: 281,
type: "general",
setup: "When does a joke become a dad joke?",
punchline: "When it becomes apparent."
}

但这是我的问题。在我的实现类中,我有以下内容,其中 getForObjects 的返回方法指向指向该数组的端点的 jokeResponse 类。这是错误的,因为该类仅指向具有上面的键值对的对象的 API 端点。

 @Override
public jokeResponse getTypesList() {
    RestTemplate restTemplate = new RestTemplate();
     return restTemplate.getForObject("https://official-joke-api.appspot.com/types", jokeResponse.class);
}

JSON 端点如下所示,一个字符串数组:

[
 "general",
 "knock-knock",
 "programming",
 "dad"
] 

我需要构造该方法,以便它提取字符串数组与对象,但我不知道如何构造它。

我尝试在 getForObjects 方法中用 String[].class 替换该类,但这并不能解决问题。

java json spring-boot
1个回答
0
投票

经过一些尝试和错误,我能够通过用类型替换方法中的类名来解决这个问题。

 @Override
    public String getTypesList() {
        RestTemplate restTemplate = new RestTemplate();
        return restTemplate.getForObject("https://official-joke-api.appspot.com/types", String.class);
}
© www.soinside.com 2019 - 2024. All rights reserved.