alibaba / higress

🤖 AI Gateway | AI Native API Gateway
https://higress.io
Apache License 2.0
2.84k stars 469 forks source link

Http转dubbo的返回值中不能正确解析引用的对象 #998

Open lionelStuart opened 3 months ago

lionelStuart commented 3 months ago
    private List<TagsModel> innerTags;

    private Map<String, TagsModel> innerMap;
        List<TinyModel> tinyModelList = new ArrayList<TinyModel>();
        tinyModelList.add(tinyModel);
        tinyModelList.add(tinyModel2);
        tinyModelList.add(tinyModel);
        response.setListTinyModel(tinyModelList);

        Map<String, TinyModel> tinyModelMap = new HashMap<String, TinyModel>();
        tinyModelMap.put("key1", tinyModel3);
        tinyModelMap.put("key2", tinyModel2);

以上返回中结果为

        "listTinyModel": [
            {
                "id": 1,
                "name": "tiny 1"
            },
            {
                "id": 2,
                "name": "tiny 2"
            },
            "Type: Ref, target Object Type: UntypedMap"
        ],
        "mapTinyModel": {
            "key1": {
                "id": 3,
                "name": "tiny 3"
            },
            "key2": "Type: Ref, target Object Type: UntypedMap"
        },

Http转Dubbo 的返回值不能被正确解析为json

johnlanni commented 3 months ago

目前还未支持引用

lionelStuart commented 3 months ago
  case Object::Type::Ref: {
    if (dynamic_cast<Hessian2::RefObject*>(input) == nullptr) {
      out = badCastErrorMessageJson(hessianType2String(input->type()));
    } else {
      Hessian2::Object* obj = static_cast<Hessian2::RefObject*>(input)->toRefDest().value();
      // out = absl::StrFormat("Type: Ref, target Object Type: %s",
      // hessianType2String(obj->type()));
      out = hessian2Json(obj);
    }
  } break;

尝试修复了一下 cc。 @johnlanni

johnlanni commented 3 months ago

@lionelStuart 测试通过的话,可以参考这里的方式提个 envoy patch 的PR:https://higress.io/zh-cn/docs/dev/code