簡體   English   中英

錯誤發送錯誤 json 文檔

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM