Как я могу сказать, что Jackson использует другой сериализатор для каждого типа коллекции Generic. У меня есть CustomProductsSerializer и CustomClientsSerializerПолиморфная сериализация коллекций с пользовательским сериализатором в jackson
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);
Вопрос в том, как рассказать о джексоне, о котором использовать сериализатор?
Я использую jackson как сериализатор json с resteasy.
- Удалить в ответ на @ HiJon89 У меня есть бизнес-объект, который возвращает «Список» и другой, который возвращает List. То, как мне нужно, - это когда объект Busines возвращает «Список», а затем «ProductListSerializer» должен использоваться для всего списка. и когда бизнес-объект возвращает «Список CustomClientsSerializer должен использоваться для всего списка. В моем случае использования я добавляю дополнительные элементы в сериализованный json 'eg: __ count, __metadata, __references'. В коллекции есть только один __count. Contentusing Может использоваться только для свойств. Какие-либо предложения ?
Кажется, проблема может быть решена путем регистрации сериализатора для данного JavaType (com.fasterxml.jackson.databind). Но simpleModule.addSerializer() принимает два параметра Class и Serilaizer. Я не могу найти метод, который может принимать JavaType. –