我有一个名为User和Department的类,它们指向mysql数据库中各自的表(多对多关系)。我想为User类中的列表部门创建一个自定义反序列化器。
{“用户ID”:1456,“第一名”:“大卫”,“中间名”:“”,“最后名”:“贝克汉姆”,“性别”:“M”,“rollno”:“”,“学期”:0,“区段”:“”,“电子邮件”:“david8@gmail.com”,“密码”:“d123avid”,“电话”:“9844547852”,“状态”:0,“用户类型”:1,“用户生物”:“我教统计学”,“profilepicture”:null,“dob”:“1999-03-21”,“facultytype”:1,“部门”:[109]}
我的用户类定义如下:
@Entity
@Table(name="user")
public class User {
@Id
@Column(name="user_id")
@JsonFormat(shape = JsonFormat.Shape.NUMBER)
private long userId;
@Column(name="first_name")
private String firstName;
@Column(name="middle_name")
private String middleName;
@Column(name="last_name")
private String lastName;
@Column(name="gender")
private char gender;
@Column(name="roll")
private String rollNo;
@Column(name="semester")
private byte semester;
@Column(name="section")
private char section;
@Column(name="email")
private String email;
@Column(name="password")
private String password;
@Column(name="phone")
private String phone;
@Column(name="status")
private byte status;
@Column(name="user_type")
private byte userType;
@Column(name="user_bio")
private String userBio;
@Column(name="profile_picture")
private String profilePicture;
@Column(name="dob")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private LocalDate dob;
@Column(name="faculty_type")// 0 is for student, 1 for permanent and 2 for visiting
private byte facultyType;
//for join table
@ManyToMany(fetch=FetchType.EAGER,
cascade= {CascadeType.PERSIST, CascadeType.MERGE,CascadeType.DETACH, CascadeType.REFRESH})
@JoinTable(
name="user_department",
joinColumns=@JoinColumn(name="user_id"),
inverseJoinColumns=@JoinColumn(name="dept_id")
)
private List<Department> departments;
目前我得到一个错误
JSON解析错误:无法构造com.maverick.project.entity.department的实例:没有int/int-argument构造函数/Factory方法可以从数字值(109)反序列化;嵌套异常是com.fasterxml.jackson.databind.jsonMappingException:无法构造com.maverick.project.entity.department的实例:没有int/int-参数构造函数/工厂方法可以从数字值反序列化(109)
我的部门类定义如下:
@Entity
@Table(name="department")
public class Department {
@Id
@Column(name="dept_id")
@JsonFormat(shape = JsonFormat.Shape.NUMBER)
private int deptId;
@Column(name="dept_name")
private String deptName;
@ManyToMany(fetch=FetchType.EAGER,
cascade= {CascadeType.PERSIST, CascadeType.MERGE,CascadeType.DETACH, CascadeType.REFRESH})
@JoinTable(
name="user_department",
joinColumns=@JoinColumn(name="dept_id"),
inverseJoinColumns=@JoinColumn(name="user_id")
)
@JsonIgnore
private List<User> users;
您不需要自定义反序列化程序。您可以添加一个参数构造函数,它接受int
:
public Department() {
}
public Department(int deptId) {
this.deptId = deptId;
}
并且它将自动反序列化到department
。在反序列化之后,如果需要的话,您需要进行额外的配置。
我希望在Jackson中为Enum类的集合创建一个自定义反序列化器。因为自定义反序列化器的行为对于所有枚举都是相同的。我想为我的所有枚举类创建公共反序列化程序。 我尝试使一般自定义反序列化如下: 问题是我想在反序列化器中调用枚举静态方法,但无法这样做,因为我没有任何可用的类/枚举上下文信息。 你能帮我知道如何实现它吗?
我已经编写了一个自定义反序列化器,它将接受字符串并对其进行反序列化公共静态类MyDeserializer extends JsonDeserializer{
JSON文档有一个属性,其中包含一组对象(也可以是使用属性名称作为键的映射)。这是唯一一个在JSON中完全序列化columns对象的地方。在其他任何地方,列都使用唯一的属性进行引用 引用可用于映射键和值 我想将此文档反序列化并: 解析属性中对应对象的引用 使用相同的java对象实例(列类是不可变的),而不是每次都创建一个新的。(我想减少对象的数量) JsonIdtyInfoesnt不适用于地图键。
我有一个Websocketendpoint,我想作为头值接收它,不是字符串,而是对象。 你知道怎么做吗?
想象一下以下场景: 我想为Foo编写一个自定义的Jackson反序列化程序。为了做到这一点(例如,为了反序列化具有Foo的类 如何编写这样的反序列化程序?这应该是可能的,因为Jackson是通过键入集合和地图来实现的。 澄清: 似乎有两个部分可以解决这个问题: 1)获取内声明的属性类型并使用它来反序列化
问题内容: 在杰克逊的数据绑定的文档表明,杰克逊支持deserialising“所有支持类型的数组”,但我不能找出确切的语法这一点。 对于单个对象,我可以这样做: 现在,对于数组,我想这样做: 有人知道是否有不可思议的命令吗?如果没有,那么解决方案是什么? 问题答案: 首先创建一个映射器: 作为数组: 作为列表: 指定列表类型的另一种方法: