我遇到的问题是我有一个用于许多地方的共同对象,在本例中常用对象是Student。学生是另一个名为Enrollment的对象的属性(但它可能是许多其他类的属性)。现在没有自定义序列化应用于学生我会得到这样的东西:Jackson自定义序列化程序:将对象更改为包含对象中的简单属性和值
{“会议”:“上午9点,”学生“:{”名字“:”乔“,”lastName“:”Bloggs“} }
我想什么做的是自定义序列适用于学生,使在任何地方它出现在我的代码,在这个例子中的,例如,招生类中,我会得到这样的:
{ “session”:“上午9点”,“firstName”:“Joe”,“lastName”:“Bloggs”}
或者如果我这样选择:
{ “会话”: “上午9点星期三”, “第一”: “乔”, “最后的”: “布罗格斯”}
或甚至是这样的:
{ “会话”: “上午9点星期三” ,“名”:“李四”}
这里是我的示例代码:
public class Enrolment {
private String session;
private Student student;
public Enrolment(String session, Student student) {
this.session = session;
this.student = student;
}
public String getSession() {
return session;
}
public void setSession(String session) {
this.session = session;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
}
@JsonSerialize(using = StudentSerializer.class)
public class Student {
private String firstName;
private String lastName;
public Student(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
public class StudentSerializer extends JsonSerializer<Student> {
@Override
public void serialize(Student value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
// ??????
}
}
public class Launcher {
public static void main(String[] args) throws Exception{
ObjectMapper mapper = new ObjectMapper();
Student student = new Student("Joe", "Bloggs");
Enrolment enrolment = new Enrolment("9am Wednesday", student);
System.out.println(mapper.writeValueAsString(enrolment));
}
}
这将是一个巨大的奖金,如果你能提供一个解串器也使得它可以接受所需的JSON的一个序列化示例并从中创建Student对象。像串行器一样,解串器也必须附加到Student对象,以便在出现的任何地方执行相同的操作。
谢谢:)