c++ - 发送不正确的 json 文档的错误
问题描述
我正在测试 example-crud 以在我的项目中应用您的框架。但我注意到了一些错误。我尝试通过这种方式从发送的 json 中获取值到 std::string 中: std::string test = userDto->userName->c_str();
ENDPOINT("POST", "users", createUser, BODY_DTO(Object<UserDto>, userDto))
{
std::string test = userDto->userName->c_str();
return createDtoResponse(Status::CODE_200, m_userService.createUser(userDto));
}
UserDto 定义如下:
class UserDto : public oatpp::DTO {
DTO_INIT(UserDto, DTO)
DTO_FIELD(Int32, id);
DTO_FIELD(String, userName, "username");
};
如果我通过后查询发送正确的 json,我会正确地获得“测试”变量的值。
{
"id": 0,
"username": "test_user"
}
但是,如果我将 json 的字段“用户名”更改为,例如,“用户名”并将此 json 发送到端点,服务器将失败并出现错误“分段错误”。
在这种情况下,服务器一定不能失败。它必须给发件人错误信息,并继续运行。
如果我只想获得一个简单的变量值,我该如何避免失败?
解决方案
由于 DTO 字段名称和 JSON-key 不匹配,userName
因此接收到的 DTO 为null
. 所以解决方案是添加一个nullptr
检查:
ENDPOINT("POST", "users", createUser,
BODY_DTO(Object<UserDto>, userDto))
{
OATPP_ASSERT_HTTP(userDto->userName, Status::CODE_400, "username is required!"); // check field for nullptr
std::string test = userDto->userName->std_str();
...
return createDtoResponse(Status::CODE_200, m_userService.createUser(userDto));
}
来源: https ://github.com/oatpp/oatpp/issues/340#issuecomment-727563144
推荐阅读
- javascript - 如何创建一个 jQuery 函数来切换暗模式?
- c++ - 算法错误:参数不能从对中转换 1
- python - PyAutoGUI - LocateAllOnScreen - 为什么信心不起作用?
- assembly - 无法在程序集中遵循 rbp 值
- jupyter-notebook - 我正在尝试将我的笔记本放在 Kaggle 上的特定目录中
- c# - 为什么 MonoBehaviour Start() 上的类引用丢失
- python - 使用 seaborn 绘制 numpy 变量列表
- ios - 是否可以在类/结构实例方法中调用 GameScene 函数?
- angularjs - 如何在不同的页面中加载图表
- tensorflow - ValueError: Tensor Tensor("dense_1/Sigmoid:0", shape=(?, 1), dtype=float32) 不是该图的元素