Send 204 when WebAPI response contains no data

This commit is contained in:
Thomas Piccirello 2024-11-21 16:16:29 -03:00
commit 72548fd18d
No known key found for this signature in database

View file

@ -361,36 +361,43 @@ void WebApplication::doProcessRequest()
try try
{ {
const APIResult result = controller->run(action, m_params, data); const APIResult result = controller->run(action, m_params, data);
switch (result.data.userType()) if (result.data.isNull())
{ {
case QMetaType::QJsonDocument: status(204);
print(result.data.toJsonDocument().toJson(QJsonDocument::Compact), Http::CONTENT_TYPE_JSON);
break;
case QMetaType::QByteArray:
{
const auto resultData = result.data.toByteArray();
print(resultData, (!result.mimeType.isEmpty() ? result.mimeType : Http::CONTENT_TYPE_TXT));
if (!result.filename.isEmpty())
{
setHeader({u"Content-Disposition"_s, u"attachment; filename=\"%1\""_s.arg(result.filename)});
}
}
break;
case QMetaType::QString:
default:
print(result.data.toString(), Http::CONTENT_TYPE_TXT);
break;
} }
else
switch (result.status)
{ {
case APIStatus::Async: switch (result.data.userType())
status(202); {
break; case QMetaType::QJsonDocument:
case APIStatus::Ok: print(result.data.toJsonDocument().toJson(QJsonDocument::Compact), Http::CONTENT_TYPE_JSON);
default: break;
status(200); case QMetaType::QByteArray:
break; {
const auto resultData = result.data.toByteArray();
print(resultData, (!result.mimeType.isEmpty() ? result.mimeType : Http::CONTENT_TYPE_TXT));
if (!result.filename.isEmpty())
{
setHeader({u"Content-Disposition"_s, u"attachment; filename=\"%1\""_s.arg(result.filename)});
}
}
break;
case QMetaType::QString:
default:
print(result.data.toString(), Http::CONTENT_TYPE_TXT);
break;
}
switch (result.status)
{
case APIStatus::Async:
status(202);
break;
case APIStatus::Ok:
default:
status(200);
break;
}
} }
} }
catch (const APIError &error) catch (const APIError &error)