Existe-t-il un moyen d'ajouter la sérialisation pour une classe d'implémentation de liste ayant des attributs personnalisés ?
Je travaille sur un service Rest en utilisant Spring-boot 1.3. Je dois retourner une réponse JSON sous la forme Liste paginée o Liste normale Selon la demande du contrôleur. Je dois donc conserver le type de retour de la méthode du contrôleur comme générique public List<Employee> getEmployees(int departmentId)
J'implémente la liste comme suit (en utilisant des génériques pour les différentes listes d'objets)
public class PagedList<E> implements List<E> {
private List<E> list;
private long totalRecords; //Getter-setters are added
public PagedList(List<E> list) {
super();
this.list = list;
}
public PagedList(List<E> list, long totalRecords) {
super();
this.list = list;
this.totalRecords = totalRecords;
}
@Override
public boolean add(E element) {
return this.list.add(element);
}
//All other List abstract methods implemented same as above using this.list
}
Ajouté JsonSerializer pour les mêmes : public class PagedListSerializer extends JsonSerializer<PagedList>
avec une logique de sérialisation dans serialize()
méthode. Celle-ci est enregistrée à l'aide de spring-boot jackson customisation :
@Bean
public Jackson2ObjectMapperBuilder objectMapperBuilder() {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
builder.serializerByType(PagedList.class, new PagedListSerializer());
return builder;
}
Lorsque j'essaie de return PagedList<Employee>(list, 1000)
Je ne parviens pas à obtenir la réponse suivante. La réponse est la même que celle d'une liste normale. La sérialisation personnalisée n'est pas exécutée. Comment obtenir la réponse paginée suivante ?
{
list : [{employeeId: "1", name: "John" }, ... ],
totalRecords : 1000
}