我的问题是,我正在尝试显示 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 替换该类,但这并不能解决问题。
经过一些尝试和错误,我能够通过用类型替换方法中的类名来解决这个问题。
@Override
public String getTypesList() {
RestTemplate restTemplate = new RestTemplate();
return restTemplate.getForObject("https://official-joke-api.appspot.com/types", String.class);
}