Как сериализовать POJO с двумя разными пользовательскими сериализаторами для двух разных API в Spring MVC?
Я использую Spring MVC для создания успокоительного API. У меня есть две разные конечные точки API, где мне нужно сериализовать один и тот же POJO двумя разными способами. Я проиллюстрировал то же самое ниже:
API курса
url - /course/{id}
response - {
"id": "c1234",
"name": "some-course",
"institute": {
"id": "i1234",
"name": "XYZ College"
}
}
мой Course
Pojo соответствует вышеуказанной структуре, поэтому сериализация по умолчанию работает.
class Course {
private String id;
private String name;
private Institute institute;
//getters and setters follow
}
class Institute {
private String id;
private String name;
//getters and setters follow
}
Теперь для другого Students
API
url - /student/{id}
response - {
"id":"s1234",
"name":"Jon Doe",
"institute": {
"id": "i1234",
"name": "XYZ college"
},
"course": {
"id": "c1234",
"name": "some-course"
}
}
И мой Student
класс выглядит так:
class Student {
private String id;
private String name;
private Course course;
//getters and setters follow
}
Обратите внимание, что нет institute
недвижимость в Student
класс, потому что институт может быть транзитивно определен из course.getInstitute
добытчик. Но это заканчивается структурой сериализации, похожей на API курса. Как можно использовать настраиваемую сериализацию только для API учеников без изменения структуры POJO.
На мой взгляд, существует N вариантов решения, которое является наиболее элегантным и предпочтительным, я хотел бы знать.
1 ответ
Я думаю, это самая элегантная вещь, которую я выбрал, которая работает для меня.
Итак, вот мой класс Student
class Student {
private String id;
private String name;
@JsonIgnoreProperties({"institute"})
private Course course;
//getters and setters
//Adding one more getter
public Institute getInstitute() {
return this.course.getInstitute();
}
}
Таким образом, я выставляю свойство Java bean institute
через getter
пока не держит ссылку на это в моем Student
Объект.