В настоящее время десериализации с GSON и модифицированным с помощью модернизаций GsonConverterFactory:Попытка перенести пользовательский общую gson десериализатор Джексона
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(new TypeToken<Map<Book, Collection<Author>>>(){}.getType(), new BooksDeserializer(context));
Gson gson = gsonBuilder.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
BookService service = retrofit.create(BookService.class);
Response<Map<Book, Collection<Author>>> response = service.getBooks().execute();
Я хотел бы использовать JacksonConverterFactory, предоставленный дооснащения? Мне нужно было бы предоставить это картографу Джексона. Есть ли способ предоставить информацию о типе этому картографу, как это было с GSON?
SimpleModule simpleModule = new SimpleModule();
// TODO provide mapper with info needed to deserialize
// Map<Book, Collection<Author>>
mapper.registerModule(simpleModule);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(JacksonConverterFactory.create(mapper))
.build();
BookService service = retrofit.create(BookService.class);
Response<Map<Book, Collection<Author>>> response = service.getBooks().execute();
Глядя конкретно на TODO, я могу рассказать картографу, чтобы использовать этот десериализатор?
public class BooksDeserializer extends JsonDeserializer<Map<Book, Collection<Author>>> {
@Override
public Map<Book, Collection<Author>> deserialize(JsonParser parser, DeserializationContext context) throws IOException, JsonProcessingException {
// deserialize here
}
}
Обновлен вопрос, попытался быть более конкретным в отношении того, что я ищу. – lostintranslation
* Глядя конкретно на TODO, могу ли я сказать картографу, чтобы использовать этот десериализатор? * Нет, мне очень жаль: Как указано в моем первоначальном ответе, во время выполнения недостаточно информации для сопоставления вашего десериализатора с чем-то вроде «Карта <Книга, сборник> ', потому что во время выполнения она неотличима от, например, 'Карта '. По этой причине вам необходимо предоставить эту информацию типа [во время компиляции] (http://wiki.fasterxml.com/JacksonInFiveMinutes#Data_Binding_with_Generics) или [программно] (http://stackoverflow.com/a/18014407/1391325) –
errantlinguist
Если это действительно так, дело не в том, что информации недостаточно, а в том, что Джексон этого не поддерживает. GSON просто отлично справляется с этим. Я думаю, что буду придерживаться GSON. – lostintranslation