Fleur Kelpin opened SPR-16461 and commented
The GSON message converter used to serialise using the class of the object that was being serialised. Now it uses the return type of the controller method.
So when I have
@GetMapping("/animal")
public Animal getAnimal() { return new Cat(...); }
the Cat-specific fields do not get serialised, only Animal fields.
Workarounds:
- When I replace GSON with Jackson on the classpath, Cat fields get serialised again.
- When I subclass the GsonHttpMessageSerializer and override writeInternal as follows:
@Override
protected void writeInternal(Object o, @Nullable Type type, Writer writer) throws Exception
{
// replaces the type info with null value
super.writeInternal(o, null, writer);
}
the Cat fields get serialized again.
Probably introduced in #17408, the last version that serialized Cats as Cats was 4.1.9.
To reproduce:
Run the repro project, and GET http://localhost:8080/SPR-16461/animal
Response should be the same as http://localhost:8080/SPR-16461/cat but isn't.
Affects: 4.3.14, 5.0.3
Reference URL: spring-attic/spring-framework-issues#175
Issue Links:
Referenced from: commits 817a836, fd964ca
Backported to: 4.3.15
Fleur Kelpin opened SPR-16461 and commented
The GSON message converter used to serialise using the class of the object that was being serialised. Now it uses the return type of the controller method.
So when I have
the Cat-specific fields do not get serialised, only Animal fields.
Workarounds:
the Cat fields get serialized again.
Probably introduced in #17408, the last version that serialized Cats as Cats was 4.1.9.
To reproduce:
Run the repro project, and GET
http://localhost:8080/SPR-16461/animalResponse should be the same as
http://localhost:8080/SPR-16461/catbut isn't.Affects: 4.3.14, 5.0.3
Reference URL: spring-attic/spring-framework-issues#175
Issue Links:
@ResponseBodymethod return type available to message convertersReferenced from: commits 817a836, fd964ca
Backported to: 4.3.15