You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oat++框架DTO字段缺失致段错误,求批量断言所有字段方法

Oat++ DTO字段缺失导致段错误及批量断言需求

在Oat++服务器中,当发送缺少部分键值对的JSON请求时,通过ENDPOINT的BODY_DTO解析为DTO对象后,直接访问不存在的字段会触发段错误,导致服务器崩溃。

控制器端点代码

ENDPOINT("POST", "/servers/{serverId}", getServerById,
                    PATH(String, serverId, "serverId"), BODY_DTO(Object<MyDTO>, body)) {
            try{
                std::cout << "body->noInJSONField : " << body->noInJSONField <<std::endl;
            } catch(std::exception& exc) {
                std::cout << exc.what() <<std::endl;
            }
}

DTO定义

class MyDTO : public oatpp::DTO {

  DTO_INIT(MyDTO, DTO  )

  DTO_FIELD(Int16, inJSONField, "inJSONField");     
  DTO_FIELD(Int16, noInJSONField, "noInJSONField");
  DTO_FIELD(Object<MyANOTHER_DTO>, smallDerivedJSONobjInMainJsonObj, "emmUhhOkay");
}

已知相关问题在StackOverflow及GitHub上有讨论,但仍想确认:是否存在类似OATPP_ASSERT_ALL_FIELDS的方法,能一次性断言DTO对象及其嵌套对象的所有字段?因为像下面这样逐个字段断言实在过于繁琐:

OATPP_ASSERT(body);
OATPP_ASSERT(body->inJSONField);
OATPP_ASSERT(body->noInJSONField);
OATPP_ASSERT(body->smallDerivedJSONobjInMainJsonObj);
OATPP_ASSERT(body->smallDerivedJSONobjInMainJsonObj->field1);
OATPP_ASSERT(body->smallDerivedJSONobjInMainJsonObj->field2);
OATPP_ASSERT(body->smallDerivedJSONobjInMainJsonObj->field3_obj->wow_another_field);

内容的提问来源于stack exchange,提问作者bababoah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 01:45:18