我正在使用C ++ REST API,并且对象有问题。我使用邮差与我的应用程序进行通信。我在cpp中有一个结构:
struct Item
{
int id;
int state; //0,1,2
std::string title;
std::string description;
std::string owner;
};
当我仅向对象添加一项(无论是哪一项)时,get方法总是正确地将其返回。
例如
在邮递员PUT方法中:
{
"title": "Test item"
}
和GET返回:
{
"Items": [
{
"Title": "Test item"
}
]
}
但是当我在PUT中使用时:
{
"id":0,
"title": "Test item",
"description": "I test this app",
"owner": "me",
"state": 0
}
或多个结构元素,GET返回:
{
"Items": []
}
如何解决此错误?我在做什么错了?
下面,我将cpp函数附加到处理PUT和GET方法。
PUT功能:
void Service::handlePut(http_request message) {
message.extract_json().then([=](pplx::task<json::value> task)
{
try
{
Item item;
json::value val = task.get();
item.id = val[U("id")].as_number().to_int32();
item.title = val[U("title")].as_string();
item.description = val[U("description")].as_string();
item.owner = val[U("owner")].as_string();
item.state = val[U("state")].as_number().to_int32();
items.push_back(item);
message.reply(status_codes::OK);
}
catch(std::exception& e) {
message.reply(status_codes::BadRequest);
}
});
}
GET函数:
void Service::handleGet(http_request message) {
vector<string> path = requestPath(message);
if(path.empty()) {
vector <json::value> jsonItems;
for(auto const& it: items)
{
json::value element;
element["ID"] = json::value::number(it.id);
element["Title"] = json::value::string(it.title);
element["Description"] = json::value::string(it.description);
element["Owner"] = json::value::string(it.owner);
element["State"] = json::value::number(it.state);
jsonItems.push_back(element);
}
json::value generatedItems;
generatedItems["Items"] = json::value::array(jsonItems);
message.reply(status_codes::OK,generatedItems);
}
else {
if(path[0]=="something"){}
else {
message.reply(status_codes::BadRequest);
}
}
}