OpenFeign/feign

incomplete Object information when serialize object with Gson

Aberta

#2.485 aberto em 24 de jul. de 2024

 (3 comentários) (0 reação) (0 responsável)Java (1.911 forks)batch import
bughelp wanted

Métricas do repositório

Stars
 (9.070 estrelas)
Métricas de merge de PR
 (Mesclagem média 2d 17h) (71 fundiu PRs em 30d)

Description


    @PostMapping("/message/send?access_token={access_token}")
    MessageResponseDTO send(@RequestParam("access_token") String accessToken, @RequestBody AbsMessage message);

Such as the code, I need to call it,the interface has different performance depends on the Object passed. However AbsMessage is a abstract class,when I call it need to pass an object which instance of AbsMessage. But the reuest body doesn't conatin any field from the runtime sub class whic I passed. All fields are from the abstract class. I find the cause at last.

  GsonEncoder#encode(Object object, Type bodyType, RequestTemplate template)
  @Override
  public void encode(Object object, Type bodyType, RequestTemplate template) {
    template.body(gson.toJson(object, bodyType));
  }

It serializes object with the type which declared in the function,not runtime type of the passed object. If gson.toJson(object),It appears normal.

Guia do colaborador