我正在尝试将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]
知道为什么吗? 我的课堂上有一个构造函数,所以我不太确定为什么这会引发错误。谢谢!
答案 0 :(得分:2)
作为例外明确指出:
(不存在像默认构造一样的创建者)
您的类Person
没有默认构造函数。
知道为什么吗?
因为您明确地定义了一个构造函数,并且由于这种行为,默认构造函数将不会自动生成。
所以您应该处理它,并且需要注意两件事:
default constructor
,您可以明确定义它,也可以使用 lombok 注释@NoArgsConstructor
; class
定义的所有属性,您还应该通过@JsonIgnoreProperties(ignoreUnknown = true)
显式地忽略它们,或者添加{{1} }分别用于其他字段。 答案 1 :(得分:1)
您的Person
类中没有默认构造函数,您可以手动创建它,也可以在类顶部使用lombok @NoargConstructor
来创建它
自从声明了参数构造函数以来,您有责任不创建arg构造函数
答案 2 :(得分:1)
您需要首先创建一个默认的构造函数。另外,您可以使用@JsonIgnoreProperties(ignoreUnknown = true)
批注忽略模型中定义的其他任何属性。