【发布时间】:2016-09-18 18:32:16
【问题描述】:
有没有办法为具有自定义属性的列表实现类添加序列化?
我正在使用 Spring-boot 1.3 开发 Rest 服务。我必须以 Paged-List 或 Normal-List 的形式返回 JSON 响应,具体取决于 Controller 上的请求。所以,我必须将控制器方法的返回类型保持为通用public List<Employee> getEmployees(int departmentId)
我正在实现如下列表(使用泛型用于不同的对象列表)
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
}
为相同添加了JsonSerializer:public class PagedListSerializer extends JsonSerializer<PagedList>,serialize() 方法中的序列化逻辑。使用spring-boot jackson customization注册:
@Bean
public Jackson2ObjectMapperBuilder objectMapperBuilder() {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
builder.serializerByType(PagedList.class, new PagedListSerializer());
return builder;
}
当我尝试return PagedList<Employee>(list, 1000) 时,我无法得到以下回复。它的返回与普通列表相同。不执行自定义序列化。如何获得以下分页响应?
{
list : [{employeeId: "1", name: "John" }, ... ],
totalRecords : 1000
}
【问题讨论】:
标签: json spring-mvc serialization spring-boot jackson