Search code examples
javaandroidgsonresttemplatespring-android

GsonBuilder registerTypeAdapter deserialization


I am having the following rest template (used for json requests to a server):

public RestTemplate createRestTemplate() {
    RestTemplate restTemplate = new RestTemplate();

    GsonBuilder builder = new GsonBuilder();
    builder.registerTypeAdapter(Image.class, new ImageDeserializer());
    builder.registerTypeAdapter(MetaData.class, new MetaDataDeserializer());
    builder.registerTypeAdapter(Vector.class, new VectorsDeserializer());

    GsonHttpMessageConverter jsonConverter = new GsonHttpMessageConverter();
    jsonConverter.setGson(builder.create());

    FormHttpMessageConverter formHttpMessageConverter = new FormHttpMessageConverter();
    StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter();
    final List<HttpMessageConverter<?>> listHttpMessageConverters = restTemplate.getMessageConverters();


    listHttpMessageConverters.add(jsonConverter);
    listHttpMessageConverters.add(formHttpMessageConverter);
    listHttpMessageConverters.add(stringHttpMessageConverter);
    restTemplate.setMessageConverters(listHttpMessageConverters);
    return restTemplate;
}

For some reason the third registerTypeAdapter call to the deserializer VectorsDeserializer does nothing. I am probably missing something here, any ideas/clarifications are very welcome.


Solution

  • I'm assuming you're using java.util.Vector.

    I so, I guess, it's because of using plain Vector.class instead of

    new TypeToken<Vector<Whatever>>() {}.getType()
    

    in the registration.