[英]Bug with sending incorrect json doc
我正在測試 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 不匹配,因此收到的 DTO 的null
userName
所以解決方案是添加一個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
我正在測試在我的項目中應用您的框架的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發送到endpoin,則服務器將失敗,並顯示錯誤“細分錯誤”。
在這種情況下服務器一定不能發生故障。 它必須將錯誤消息發送給發件人,然后繼續運行。
如果我只想獲得一個簡單的變量值,如何避免失敗?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.