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

RestTemplate序列化为POJO时返回null

微生季
2023-03-14

我在遵循at spring网站的创业指南https://spring.io/guides/gs/consuming-rest/.

我没有遵循确切的教程,因为我正在使用另一个endpoint:http://www.omdbapi.com?s=rush.

我在将JSON转换为POJO时遇到了问题。我没有收到任何错误或异常。有人能指出我哪里做错了吗?

您可以在此处找到完整的代码

这是我的POJO:

package com.sample.restapi.model;

import java.util.List;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown=true)
public class SearchResponse {

    private List<Search> search;

    private String totalResults;

    private String response;

    public SearchResponse() {

    }

    public List<Search> getSearch() {
        return search;
    }

    public void setSearch(List<Search> search) {
        this.search = search;
    }

    public String getTotalResults() {
        return totalResults;
    }

    public void setTotalResults(String totalResults) {
        this.totalResults = totalResults;
    }

    public String getResponse() {
        return response;
    }

    public void setResponse(String response) {
        this.response = response;
    }

    @Override
    public String toString() {
        return "SearchResponse [search=" + search + ", totalResults=" + totalResults + ", response=" + response + "]";
    }

}

这是搜索结果。Java语言

package com.sample.restapi.model;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown=true)
public class Search {

    private String title;

    private String year;

    private String imdbID;

    private String type;

    private String poster;

    public Search() {

    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getYear() {
        return year;
    }

    public void setYear(String year) {
        this.year = year;
    }

    public String getImdbID() {
        return imdbID;
    }

    public void setImdbID(String imdbID) {
        this.imdbID = imdbID;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getPoster() {
        return poster;
    }

    public void setPoster(String poster) {
        this.poster = poster;
    }

    @Override
    public String toString() {
        return "Search [title=" + title + ", year=" + year + ", imdbID=" + imdbID + ", type=" + type + ", poster="
                + poster + "]";
    }
}

这是驾驶员课程。

package com.sample.restapi;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.client.RestTemplate;

import com.sample.restapi.model.SearchResponse;

@SpringBootApplication
public class ConsumerApplication {

    private static final Logger log = LoggerFactory.getLogger(ConsumerApplication.class);

    public static void main(String[] args) {

        RestTemplate restTemplate = new RestTemplate();
        SearchResponse searchResponse = restTemplate.getForObject("http://www.omdbapi.com?s=rush", SearchResponse.class);

        log.info(searchResponse.toString());
    }
}

控制台输出为:

14:34:12.941 [main] INFO com.sample.restapi.ConsumerApplication - SearchResponse [search=null, totalResults=344, response=null]

共有1个答案

西门鹏程
2023-03-14

您缺少json中属性的正确标识符,响应和您的类在大写和小写字母中存在差异。在您的类中使用@JsonProperty。

@JsonProperty("Search")
private List<Search> search = new ArrayList<Search>();

private String totalResults;
@JsonProperty("Response")
private String response;

您还应该在Search类中添加@JsonProperty注释。

 类似资料:
  • 我试图测试一个简单POST Rest调用,但存在NullPointerException。 我的RestController: 我的单元测试: 由于以下错误,此测试失败:NullPointerException,确切地说,response ResponseEntity对象为Null。 verify输出将执行以下操作: 知道为什么响应是空的吗?我为测试使用了正确的注释,因此应该注入模拟。也许我在这里

  • 我正在使用spring boot(2.26)和AWS SDK为Java(1.11.761)。 我的问题是@lambdafunction无法反序列化到我的POJO,失败原因是: “com.fasterxml.jackson.databind.exc.MismatchedInputException:无法构造的实例(尽管至少存在一个创建者):没有可从[source:(byte[])”“{\”end\“

  • 我正在尝试使用RestTemplate使用REST服务。我无法反序列化JSON响应。我正在使用一个自定义反序列化程序,我的JSON有3个节点,但看起来只有一个节点到达反序列化程序。以下是更多详细信息。 以下是JSON的响应: 我正在使用@jsondeselizer对属性Hello的响应类使用自定义反序列化器。 当我执行如下readTree时: 它到达了反序列化方法,看起来它只有一个节点,而不是下面

  • 我有一个映射 ,它包含一个反序列化的JSON形式。我想将其反序列化到POJO的字段中。 解决方案最好使用Gson或Jackson,因为项目已经在使用它们。 示例代码:

  • 我正在使用java spark API编写一些测试应用程序。我使用的是一个不扩展可序列化接口的类。因此,为了使应用程序正常工作,我使用kryo序列化器序列化类。但我在调试时观察到的问题是,在反序列化过程中,返回的类对象变为null,并反过来抛出一个null指针异常。这似乎是关闭的问题,事情是错误的,但不确定。因为我是新的这种系列化,我不知道从哪里开始挖掘。 下面是我正在测试的代码: 下面是我正在序

  • 使用GSON如何将列表的类名附加到输出的json字符串中?我已经浏览了api,但没有找到任何与此相关的参考资料。我在真实代码中使用了GsonBuilder,但也没有看到任何选项。 这将提供以下输出: json=[{“name”:“Alice”},{“name”:“Bob”}] 如何实现以下输出?或者类似的东西。 json={"人":[{"名字":"爱丽丝"},{"名字":"鲍勃"}]} 或 jso