Java Spring Boot 使用剩余 api 映射到模型

标签 java rest spring-boot resttemplate

我正在尝试将 API 的响应映射到我的对象:

class Person {
  private Long id;
  private String firstname;
  private String lastname;

  public Person(Long id, String firstname, String lastname)
...

我的 api 调用如下所示:

RestTemplate restTemplate = new RestTemplate();
Person person = restTemplate.getForObject("http://xxx/getPerson", Person.class);

它返回一个如下所示的 json:

{
 "id": 1,
 "firstname": "first",
 "lastname": "last"
}

不幸的是,我收到以下错误:

Type definition error: [simple type, class xxx.Person]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `xxx.Person` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)\n at [Source: (PushbackInputStream); line: 4, column: 5]

知道为什么吗? 我的类中有一个构造函数,所以我不太确定为什么会抛出错误。谢谢!

最佳答案

正如异常明确指出的那样:

(no Creators, like default construct, exist)

您的类 Person 没有默认构造函数

Any idea why?

因为您显式定义了构造函数,并且由于此行为,默认构造函数将不会自动生成。

所以你应该处理它,并且有两件事你需要关心:

  1. 提供默认构造函数,您可以显式定义它,也可以使用lombok注释@NoArgsConstructor
  2. 另一个提示可能是属性不匹配问题,如果 json 没有您的 class 定义的所有属性,您还应该通过 @JsonIgnoreProperties(ignoreUnknown = true) 显式忽略它们 到类或单独为额外字段添加 @JsonIgnore

关于Java Spring Boot 使用剩余 api 映射到模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51868938/

相关文章:

java - 使用 JNI 在 C++ 中加载 .jar 文件

web-services - SOAP Web 服务和 OData 服务之间的具体区别是什么?

java - 锁定上传的文件物理位置存储

java - 删除多余空格函数的时间复杂度

java - 如何在 Spring MVC 中解码 Gzip 压缩请求体

java - 是否可以通过RESTFUL API创建azure VM而不创建云服务

spring - 使用 memcached 和 spring boot 为不同对象自定义过期日期

java - Spring Boot 应用程序无法加载测试属性

spring-boot - 有任何Springfox替代品吗?

java - 如何判断文件何时将 "Done"复制到监视目录中?