我如何告诉杰克逊为每个通用集合类型使用不同的序列化程序。我有一个 CustomProductsSerializer 和一个 CustomClientsSerializer
public class ProductsListSerializer extends JsonSerializer<List<Products>>{
// logic to insert __metadata , __count into json
public void serialize(List<Products> value, JsonGenerator jgen, SerializerProvider provider) {
.... .... ....
}
// always returns ArrayList.class
public Class<List<Instrument>> handledType() {
Class c = var.getClass();
return c;
}
}
public class CustomClientsSerializer extends JsonSerializer<List<Clients>>{
// logic to insert __metadata , __count into json
public void serialize(List<Clients> value, JsonGenerator jgen, SerializerProvider provider){
.... .... ....
}
.... .... ....
// always returns ArrayList.class
public Class<List<Clients>> handledType() {
Class c = var.getClass();
return c;
}
}
我已经使用 SimpleModule 注册了两个序列化程序。问题是,由于这两种情况下的handledType都返回ArrayList.class,下面的客户端序列化失败并出现类转换异常。
List<Clients> clients;
// code to get clients from database.
String jsonString = mapper.writeValueAsString(clients);
问题是如何告诉杰克逊使用哪个序列化程序?
我使用杰克逊作为resteasy的json序列化程序。
--编辑以响应@HiJon89 我有一个返回“列表”的业务对象和另一个返回列表的业务对象。我需要的方式是当 Busines 对象返回一个“列表”时,应该将 ProductsListSerializer 用于整个列表。并且当业务对象返回“列表”时,应将 CustomClientsSerializer 用于整个列表。在我的用例中,我将附加元素附加到序列化的 json 'eg:__count, __metadata, __references' 每个集合只有一个 __count。Contentusing 只能用于属性。有什么建议么 ?