higress
higress copied to clipboard
Http转dubbo协议的List类型不支持结构体元素类型
MyResponse getPosition(Position pos);
public class Position implements Serializable {
public String name;
public Long age;
public Integer weight;
public Float height;
private Date born;
private List<TagsModel> innerTags;
private Map<String, TagsModel> innerMap;
private TagsModel outerTag;
private List<String> funs;
}
# 服务端日志
# getPosition get pos = Position(name=jim, age=7, weight=60, height=187.0, born=Mon Jan 01 19:00:29 CST 2024, innerTags=[null, null], innerMap={a=TagsModel{id=1, name='null', postId=null, addBy='ssss'}, b=TagsModel{id=3, name='null', postId=null, addBy='bbbb'}}, outerTag=TagsModel{id=10, name='ffff', postId=null, addBy='null'}, funs=[a, b, c])
定义上面的dubbo接口,解析字段中List<TagsModel> 解析出来为[null, null],Map解析出来为nnerMap={a=TagsModel{id=1, name='null', postId=null, addBy='ssss'},看起来List应该还不支持结构体类型的元素 从代码来看也能应证
void DubboUtility::createUntypedListObjcet(const json& object,
Hessian2::Object::UntypedList& untyped_list) {
auto type = object.type();
switch (type) {
case json::value_t::string:
untyped_list.emplace_back(std::make_unique<Hessian2::StringObject>(object.get<std::string>()));
break;
case json::value_t::number_unsigned:
case json::value_t::number_integer:
untyped_list.emplace_back(std::make_unique<Hessian2::IntegerObject>(object.get<int64_t>()));
break;
case json::value_t::number_float:
untyped_list.emplace_back(std::make_unique<Hessian2::DoubleObject>(object.get<double>()));
break;
case json::value_t::boolean:
untyped_list.emplace_back(std::make_unique<Hessian2::BooleanObject>(object.get<bool>()));
break;
case json::value_t::binary:
untyped_list.emplace_back(std::make_unique<Hessian2::BinaryObject>(object.get_binary()));
break;
case json::value_t::null:
default:
untyped_list.emplace_back(std::make_unique<Hessian2::NullObject>());
break;
}
}