OpenFeign/feign

incomplete Object information when serialize object with Gson

Open

#2,485 创建于 2024年7月24日

在 GitHub 查看
 (3 评论) (0 反应) (0 负责人)Java (1,911 fork)batch import
bughelp wanted

仓库指标

Star
 (9,070 star)
PR 合并指标
 (平均合并 2天 17小时) (30 天内合并 71 个 PR)

描述


    @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.

贡献者指南