在我的春季启动项目中,我注意到杰克逊的一个奇怪的行为。我在互联网上搜索,找到了该怎么做,但还没有找到原因。
用户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)