相关疑难解决方法(0)

Jackson 什么时候需要无参数构造函数来进行反序列化?

在我的春季启动项目中,我注意到杰克逊的一个奇怪的行为。我在互联网上搜索,找到了该怎么做,但还没有找到原因

用户D至:

@Setter
@Getter
@AllArgsConstructor
public class UserDto {

    private String username;

    private String email;

    private String password;

    private String name;

    private String surname;

    private UserStatus status;

    private byte[] avatar;

    private ZonedDateTime created_at;
}
Run Code Online (Sandbox Code Playgroud)

添加新用户效果很好。

标签D至:

@Setter
@Getter
@AllArgsConstructor
public class TagDto {

    private String tag;
}
Run Code Online (Sandbox Code Playgroud)

尝试添加新标签会出现错误:

com.fasterxml.jackson.databind.exc.MismatchedInputException:无法构造 TagDto 的实例(尽管至少存在一个 Creator):无法从对象值反序列化(没有基于委托或属性的 Creator)

该问题的解决方案是向 TagDto 类添加零参数构造函数。

为什么 Jackson 在 TagDto 中需要无参数构造函数进行反序列化,而在 UserDto 中却可以正常工作?

使用相同的方法添加两者。我的标签和用户实体均注释为

@Entity
@Setter
@Getter
@NoArgsConstructor
Run Code Online (Sandbox Code Playgroud)

并具有所有参数构造函数:

@Entity
@Setter
@Getter
@NoArgsConstructor
public class User extends AbstractModel …
Run Code Online (Sandbox Code Playgroud)

java json jackson lombok spring-boot

20
推荐指数
1
解决办法
1万
查看次数

标签 统计

jackson ×1

java ×1

json ×1

lombok ×1

spring-boot ×1