我遇到的問題是我有一個用於許多地方的共同對象,在本例中常用對象是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對象,以便在出現的任何地方執行相同的操作。
謝謝:)