【发布时间】:2015-07-03 12:44:28
【问题描述】:
我遇到的问题是我有一个在很多地方都使用的公共对象,在这个例子中,公共对象是学生。 Student 是另一个名为 Enrollment 的对象的属性(但是它可能是许多其他类的属性)。现在,如果没有对 Student 应用自定义序列化,我会得到这样的结果:
{"session":"9am Wednesday","student":{"firstName":"Joe","lastName":"Bloggs"}}
我想做的是为 Student 应用一个自定义序列化程序,以便它出现在我的代码中的任何地方,例如在这个例子中它在 Enrollment 类中,我会得到这个:
{"session":"9am Wednesday","firstName":"Joe","lastName":"Bloggs"}
或者如果我这样选择:
{"session":"9am Wednesday","first":"Joe","last":"Bloggs"}
或者甚至是这样:
{"session":"9am Wednesday","name":"Joe Bloggs"}
这是我的示例代码:
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 对象,以便它出现的任何地方都会执行相同的操作。
谢谢你:)
【问题讨论】:
标签: java json serialization jackson deserialization