From 26993046283605a806f34ba604e7dcef20f34ba5 Mon Sep 17 00:00:00 2001 From: Juha Vuolle Date: Thu, 11 Jan 2024 09:47:15 +0200 Subject: [PATCH] Take QJsonDocument as a parameter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead of separate QJsonObject and QJsonArray types. Resulted from API-review Pick-to: 6.7 Change-Id: I977d692d3709a8c3aa872683ddda54a143c25e67 Reviewed-by: Marc Mutz Reviewed-by: MÃ¥rten Nordheim --- src/network/access/qrestaccessmanager.cpp | 98 +++---------------- src/network/access/qrestaccessmanager.h | 11 +-- src/network/access/qrestaccessmanager_p.h | 7 +- .../src_network_access_qrestaccessmanager.cpp | 2 +- .../tst_qrestaccessmanager.cpp | 14 +-- 5 files changed, 31 insertions(+), 101 deletions(-) diff --git a/src/network/access/qrestaccessmanager.cpp b/src/network/access/qrestaccessmanager.cpp index aff6a04899..14ffaac641 100644 --- a/src/network/access/qrestaccessmanager.cpp +++ b/src/network/access/qrestaccessmanager.cpp @@ -129,7 +129,7 @@ Q_LOGGING_CATEGORY(lcQrest, "qt.network.access.rest") \li - \li X \row - \li QJsonObject *) + \li QJsonDocument *) \li X \li X \li X @@ -137,15 +137,6 @@ Q_LOGGING_CATEGORY(lcQrest, "qt.network.access.rest") \li X \li - \li - - \row - \li QJsonArray *) - \li - - \li X - \li X - \li - - \li X - \li - - \li - \row \li QVariantMap **) \li - @@ -175,7 +166,7 @@ Q_LOGGING_CATEGORY(lcQrest, "qt.network.access.rest") \li X \endtable - *) QJsonObject and QJsonArray are sent in \l QJsonDocument::Compact format, + *) QJsonDocument is sent in \l QJsonDocument::Compact format, and the \c Content-Type header is set to \c {application/json} if the \c Content-Type header was not set @@ -226,7 +217,7 @@ Q_LOGGING_CATEGORY(lcQrest, "qt.network.access.rest") /*! \fn template> QNetworkReply *QRestAccessManager::get( - const QNetworkRequest &request, const QJsonObject &data, + const QNetworkRequest &request, const QJsonDocument &data, const ContextTypeForFunctor *context, Functor &&callback) @@ -244,7 +235,7 @@ Q_LOGGING_CATEGORY(lcQrest, "qt.network.access.rest") /*! \fn template> QNetworkReply *QRestAccessManager::post( - const QNetworkRequest &request, const QJsonObject &data, + const QNetworkRequest &request, const QJsonDocument &data, const ContextTypeForFunctor *context, Functor &&callback) @@ -263,8 +254,7 @@ Q_LOGGING_CATEGORY(lcQrest, "qt.network.access.rest") data types are supported: \list \li QByteArray - \li QJsonObject *) - \li QJsonArray *) + \li QJsonDocument *) \li QVariantMap **) \li QHttpMultiPart* \li QIODevice* @@ -279,15 +269,7 @@ Q_LOGGING_CATEGORY(lcQrest, "qt.network.access.rest") */ /*! - \fn template> QNetworkReply *QRestAccessManager::post( - const QNetworkRequest &request, const QJsonArray &data, - const ContextTypeForFunctor *context, - Functor &&callback) - \overload -*/ - -/*! \fn template> QNetworkReply *QRestAccessManager::post( const QNetworkRequest &request, const QVariantMap &data, const ContextTypeForFunctor *context, @@ -325,7 +307,7 @@ Q_LOGGING_CATEGORY(lcQrest, "qt.network.access.rest") /*! \fn template> QNetworkReply *QRestAccessManager::put( - const QNetworkRequest &request, const QJsonObject &data, + const QNetworkRequest &request, const QJsonDocument &data, const ContextTypeForFunctor *context, Functor &&callback) @@ -344,8 +326,7 @@ Q_LOGGING_CATEGORY(lcQrest, "qt.network.access.rest") data types are supported: \list \li QByteArray - \li QJsonObject *) - \li QJsonArray *) + \li QJsonDocument *) \li QVariantMap **) \li QHttpMultiPart* \li QIODevice* @@ -359,15 +340,6 @@ Q_LOGGING_CATEGORY(lcQrest, "qt.network.access.rest") \sa QRestReply */ -/*! - \fn template> QNetworkReply *QRestAccessManager::put( - const QNetworkRequest &request, const QJsonArray &data, - const ContextTypeForFunctor *context, - Functor &&callback) - - \overload -*/ - /*! \fn template> QNetworkReply *QRestAccessManager::put( const QNetworkRequest &request, const QVariantMap &data, @@ -406,7 +378,7 @@ Q_LOGGING_CATEGORY(lcQrest, "qt.network.access.rest") /*! \fn template> QNetworkReply *QRestAccessManager::patch( - const QNetworkRequest &request, const QJsonObject &data, + const QNetworkRequest &request, const QJsonDocument &data, const ContextTypeForFunctor *context, Functor &&callback) @@ -425,8 +397,7 @@ Q_LOGGING_CATEGORY(lcQrest, "qt.network.access.rest") data types are supported: \list \li QByteArray - \li QJsonObject *) - \li QJsonArray *) + \li QJsonDocument *) \li QVariantMap **) \li QIODevice* \endlist @@ -439,15 +410,6 @@ Q_LOGGING_CATEGORY(lcQrest, "qt.network.access.rest") \sa QRestReply */ -/*! - \fn template> QNetworkReply *QRestAccessManager::patch( - const QNetworkRequest &request, const QJsonArray &data, - const ContextTypeForFunctor *context, - Functor &&callback) - - \overload -*/ - /*! \fn template> QNetworkReply *QRestAccessManager::patch( const QNetworkRequest &request, const QVariantMap &data, @@ -595,16 +557,7 @@ QRestAccessManagerPrivate::~QRestAccessManagerPrivate() } QNetworkReply *QRestAccessManager::postWithDataImpl(const QNetworkRequest &request, - const QJsonObject &data, const QObject *context, - QtPrivate::QSlotObjectBase *slot) -{ - Q_D(QRestAccessManager); - return d->executeRequest([&](auto req, auto json) { return d->qnam->post(req, json); }, - data, request, context, slot); -} - -QNetworkReply *QRestAccessManager::postWithDataImpl(const QNetworkRequest &request, - const QJsonArray &data, const QObject *context, + const QJsonDocument &data, const QObject *context, QtPrivate::QSlotObjectBase *slot) { Q_D(QRestAccessManager); @@ -616,7 +569,7 @@ QNetworkReply *QRestAccessManager::postWithDataImpl(const QNetworkRequest &reque const QVariantMap &data, const QObject *context, QtPrivate::QSlotObjectBase *slot) { - return postWithDataImpl(request, QJsonObject::fromVariantMap(data), context, slot); + return postWithDataImpl(request, QJsonDocument::fromVariant(data), context, slot); } QNetworkReply *QRestAccessManager::postWithDataImpl(const QNetworkRequest &request, @@ -659,7 +612,7 @@ QNetworkReply *QRestAccessManager::getWithDataImpl(const QNetworkRequest &reques } QNetworkReply *QRestAccessManager::getWithDataImpl(const QNetworkRequest &request, - const QJsonObject &data, const QObject *context, + const QJsonDocument &data, const QObject *context, QtPrivate::QSlotObjectBase *slot) { Q_D(QRestAccessManager); @@ -690,16 +643,7 @@ QNetworkReply *QRestAccessManager::headNoDataImpl(const QNetworkRequest &request } QNetworkReply *QRestAccessManager::putWithDataImpl(const QNetworkRequest &request, - const QJsonObject &data, const QObject *context, - QtPrivate::QSlotObjectBase *slot) -{ - Q_D(QRestAccessManager); - return d->executeRequest([&](auto req, auto json) { return d->qnam->put(req, json); }, - data, request, context, slot); -} - -QNetworkReply *QRestAccessManager::putWithDataImpl(const QNetworkRequest &request, - const QJsonArray &data, const QObject *context, + const QJsonDocument &data, const QObject *context, QtPrivate::QSlotObjectBase *slot) { Q_D(QRestAccessManager); @@ -711,7 +655,7 @@ QNetworkReply *QRestAccessManager::putWithDataImpl(const QNetworkRequest &reques const QVariantMap &data, const QObject *context, QtPrivate::QSlotObjectBase *slot) { - return putWithDataImpl(request, QJsonObject::fromVariantMap(data), context, slot); + return putWithDataImpl(request, QJsonDocument::fromVariant(data), context, slot); } QNetworkReply *QRestAccessManager::putWithDataImpl(const QNetworkRequest &request, @@ -740,17 +684,7 @@ QNetworkReply *QRestAccessManager::putWithDataImpl(const QNetworkRequest &reques static const auto PATCH = "PATCH"_ba; QNetworkReply *QRestAccessManager::patchWithDataImpl(const QNetworkRequest &request, - const QJsonObject &data, const QObject *context, - QtPrivate::QSlotObjectBase *slot) -{ - Q_D(QRestAccessManager); - return d->executeRequest( - [&](auto req, auto json){ return d->qnam->sendCustomRequest(req, PATCH, json); }, - data, request, context, slot); -} - -QNetworkReply *QRestAccessManager::patchWithDataImpl(const QNetworkRequest &request, - const QJsonArray &data, const QObject *context, + const QJsonDocument &data, const QObject *context, QtPrivate::QSlotObjectBase *slot) { Q_D(QRestAccessManager); @@ -763,7 +697,7 @@ QNetworkReply *QRestAccessManager::patchWithDataImpl(const QNetworkRequest &requ const QVariantMap &data, const QObject *context, QtPrivate::QSlotObjectBase *slot) { - return patchWithDataImpl(request, QJsonObject::fromVariantMap(data), context, slot); + return patchWithDataImpl(request, QJsonDocument::fromVariant(data), context, slot); } QNetworkReply *QRestAccessManager::patchWithDataImpl(const QNetworkRequest &request, diff --git a/src/network/access/qrestaccessmanager.h b/src/network/access/qrestaccessmanager.h index bc92626d18..e65693e6a7 100644 --- a/src/network/access/qrestaccessmanager.h +++ b/src/network/access/qrestaccessmanager.h @@ -89,22 +89,19 @@ public: QREST_METHOD_NO_DATA(head) QREST_METHOD_NO_DATA(get) QREST_METHOD_WITH_DATA(get, const QByteArray &) - QREST_METHOD_WITH_DATA(get, const QJsonObject &) + QREST_METHOD_WITH_DATA(get, const QJsonDocument &) QREST_METHOD_WITH_DATA(get, QIODevice *) - QREST_METHOD_WITH_DATA(post, const QJsonObject &) - QREST_METHOD_WITH_DATA(post, const QJsonArray &) + QREST_METHOD_WITH_DATA(post, const QJsonDocument &) QREST_METHOD_WITH_DATA(post, const QVariantMap &) QREST_METHOD_WITH_DATA(post, const QByteArray &) QREST_METHOD_WITH_DATA(post, QHttpMultiPart *) QREST_METHOD_WITH_DATA(post, QIODevice *) - QREST_METHOD_WITH_DATA(put, const QJsonObject &) - QREST_METHOD_WITH_DATA(put, const QJsonArray &) + QREST_METHOD_WITH_DATA(put, const QJsonDocument &) QREST_METHOD_WITH_DATA(put, const QVariantMap &) QREST_METHOD_WITH_DATA(put, const QByteArray &) QREST_METHOD_WITH_DATA(put, QHttpMultiPart *) QREST_METHOD_WITH_DATA(put, QIODevice *) - QREST_METHOD_WITH_DATA(patch, const QJsonObject &) - QREST_METHOD_WITH_DATA(patch, const QJsonArray &) + QREST_METHOD_WITH_DATA(patch, const QJsonDocument &) QREST_METHOD_WITH_DATA(patch, const QVariantMap &) QREST_METHOD_WITH_DATA(patch, const QByteArray &) QREST_METHOD_WITH_DATA(patch, QIODevice *) diff --git a/src/network/access/qrestaccessmanager_p.h b/src/network/access/qrestaccessmanager_p.h index 08f1341a09..5a232ceadd 100644 --- a/src/network/access/qrestaccessmanager_p.h +++ b/src/network/access/qrestaccessmanager_p.h @@ -49,8 +49,8 @@ public: return createActiveRequest(reply, context, slot); } - template - QNetworkReply *executeRequest(Functor requestOperation, Json jsonData, + template + QNetworkReply *executeRequest(Functor requestOperation, const QJsonDocument &jsonDoc, const QNetworkRequest &request, const QObject *context, QtPrivate::QSlotObjectBase *slot) { @@ -62,8 +62,7 @@ public: req.setHeader(QNetworkRequest::ContentTypeHeader, QLatin1StringView{"application/json"}); } - QJsonDocument json(jsonData); - QNetworkReply *reply = requestOperation(req, json.toJson(QJsonDocument::Compact)); + QNetworkReply *reply = requestOperation(req, jsonDoc.toJson(QJsonDocument::Compact)); return createActiveRequest(reply, context, slot); } diff --git a/src/network/doc/snippets/code/src_network_access_qrestaccessmanager.cpp b/src/network/doc/snippets/code/src_network_access_qrestaccessmanager.cpp index 56f18beff6..8f9e00f4b6 100644 --- a/src/network/doc/snippets/code/src_network_access_qrestaccessmanager.cpp +++ b/src/network/doc/snippets/code/src_network_access_qrestaccessmanager.cpp @@ -25,7 +25,7 @@ manager->get(request, this, &MyClass::handleFinished); //! [2] -QJsonObject myJson; +QJsonDocument myJson; // ... manager->post(request, myJson, this, [this](QRestReply &reply) { if (!reply.isSuccess()) { diff --git a/tests/auto/network/access/qrestaccessmanager/tst_qrestaccessmanager.cpp b/tests/auto/network/access/qrestaccessmanager/tst_qrestaccessmanager.cpp index a19f73163e..2e3ceac15a 100644 --- a/tests/auto/network/access/qrestaccessmanager/tst_qrestaccessmanager.cpp +++ b/tests/auto/network/access/qrestaccessmanager/tst_qrestaccessmanager.cpp @@ -146,7 +146,7 @@ void tst_QRestAccessManager::requests() VERIFY_REPLY_OK(methodGET); QCOMPARE(serverSideRequest.body, byteArrayData); - manager.get(request, jsonObjectData, this, callback); + manager.get(request, QJsonDocument{jsonObjectData}, this, callback); VERIFY_REPLY_OK(methodGET); QCOMPARE(QJsonDocument::fromJson(serverSideRequest.body).object(), jsonObjectData); @@ -175,11 +175,11 @@ void tst_QRestAccessManager::requests() VERIFY_REPLY_OK(methodPOST); QCOMPARE(serverSideRequest.body, byteArrayData); - manager.post(request, jsonObjectData, this, callback); + manager.post(request, QJsonDocument{jsonObjectData}, this, callback); VERIFY_REPLY_OK(methodPOST); QCOMPARE(QJsonDocument::fromJson(serverSideRequest.body).object(), jsonObjectData); - manager.post(request, jsonArrayData, this, callback); + manager.post(request, QJsonDocument{jsonArrayData}, this, callback); VERIFY_REPLY_OK(methodPOST); QCOMPARE(QJsonDocument::fromJson(serverSideRequest.body).array(), jsonArrayData); @@ -203,11 +203,11 @@ void tst_QRestAccessManager::requests() VERIFY_REPLY_OK(methodPUT); QCOMPARE(serverSideRequest.body, byteArrayData); - manager.put(request, jsonObjectData, this, callback); + manager.put(request, QJsonDocument{jsonObjectData}, this, callback); VERIFY_REPLY_OK(methodPUT); QCOMPARE(QJsonDocument::fromJson(serverSideRequest.body).object(), jsonObjectData); - manager.put(request, jsonArrayData, this, callback); + manager.put(request, QJsonDocument{jsonArrayData}, this, callback); VERIFY_REPLY_OK(methodPUT); QCOMPARE(QJsonDocument::fromJson(serverSideRequest.body).array(), jsonArrayData); @@ -231,11 +231,11 @@ void tst_QRestAccessManager::requests() VERIFY_REPLY_OK(methodPATCH); QCOMPARE(serverSideRequest.body, byteArrayData); - manager.patch(request, jsonObjectData, this, callback); + manager.patch(request, QJsonDocument{jsonObjectData}, this, callback); VERIFY_REPLY_OK(methodPATCH); QCOMPARE(QJsonDocument::fromJson(serverSideRequest.body).object(), jsonObjectData); - manager.patch(request, jsonArrayData, this, callback); + manager.patch(request, QJsonDocument{jsonArrayData}, this, callback); VERIFY_REPLY_OK(methodPATCH); QCOMPARE(QJsonDocument::fromJson(serverSideRequest.body).array(), jsonArrayData);