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
相关产品推荐
相关产品推荐

