Lau*_*uri 8 c++ qt httprequest hl7-fhir hapi-fhir
我正在尝试从此链接中找到示例以使其工作。
GETandDELETE方法正在起作用,但我对PUTand有一些问题POST。我得到服务器回复:Bad Request。随着qDebug()我得到这个错误:
QNetworkReply::NetworkError(ProtocolInvalidOperationError)
对于httprequestworker.cpp,我已将请求类型更改为:
request_content.append("Content-Type: application/fhir+json");
Run Code Online (Sandbox Code Playgroud)
这是我从计算机获取 JSON 文件内容并为服务器执行整个请求输入的函数:
void MainWindow::on_pushButton_clicked()
{
QString url_str = "http://hapi.fhir.org/baseDstu3/Patient/4705560";
HttpRequestInput input(url_str, "PUT");
QString settings;
QFile file;
file.setFileName("C:/Users/Lauri/Desktop/FHIR/Omia testeja/themostsimplepatientJSON.json");
file.open(QIODevice::ReadOnly | QIODevice::Text);
settings = file.readAll();
file.close();
settings.remove(QRegExp("[\\n]"));
qDebug() << settings;
settings.toUtf8();
input.add_var("key1", settings);
HttpRequestWorker *worker = new HttpRequestWorker(this);
connect(worker, SIGNAL(on_execution_finished(HttpRequestWorker*)), this, SLOT(handle_result(HttpRequestWorker*)));
worker->execute(&input);
}
Run Code Online (Sandbox Code Playgroud)
这是我要上传的简单 JSON:
{
"resourceType": "Patient",
"text": {
"status": "generated",
"div": "<div xmlns='http://www.w3.org/1999/xhtml'>This is a test patient<a name='mm'/></div>"
},
"name": [
{
"use": "usual",
"prefix": [
"Mr"
],
"given": [
"Teppo",
"Testi"
],
"family": "Testinen"
}
],
"telecom": [
{
"value": "123456789",
"system": "phone",
"use": "home"
}
],
"gender": "male",
"birthDate": "2018-08-21"
}
Run Code Online (Sandbox Code Playgroud)
JSON文件应该是对的,因为我已经能够POST和PUT与邮差和其他工具。有什么明显的东西我失踪了吗?
来自邮递员的捕获:


随着qDebug()我可以看到在读了JSON是成功的。我一直在努力寻找解决方案ProtocolInvalidOperationError,但没有成功。
该类HttpRequestWorker不支持json的发送,所以我不会在例子中使用它。对于这种情况,我将QNetworkAccessManager直接使用:
在 PUT 的情况下,您必须在 .json 中添加 id,以便您可以修改文件或通过代码来完成,在这种情况下使用第二种情况:
放:
主窗口.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QNetworkAccessManager>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_pushButton_clicked();
void onManagerFinished(QNetworkReply *reply);
private:
Ui::MainWindow *ui;
QNetworkAccessManager manager;
};
#endif // MAINWINDOW_H
Run Code Online (Sandbox Code Playgroud)
主窗口.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFile>
#include <QJsonDocument>
#include <QJsonObject>
#include <QMessageBox>
#include <QNetworkReply>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(&manager, &QNetworkAccessManager::finished, this, &MainWindow::onManagerFinished);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
QNetworkRequest request(QUrl("http://hapi.fhir.org/baseDstu3/Patient/4705560"));
request.setRawHeader("Content-Type", "application/fhir+json");
QFile file("/path/of/themostsimplepatientJSON.json");
if(file.open(QIODevice::ReadOnly)){
QJsonDocument doc = QJsonDocument::fromJson(file.readAll());
QJsonObject obj = doc.object();
obj["id"] = "4705560"; // add ID
doc.setObject(obj);
manager.put(request, doc.toJson());
}
}
void MainWindow::onManagerFinished(QNetworkReply *reply)
{
qDebug()<< reply->readAll();
}
Run Code Online (Sandbox Code Playgroud)
输出:
"{\n \"resourceType\": \"OperationOutcome\",\n \"text\": {\n \"status\": \"generated\",\n \"div\": \"<div xmlns=\\\"http://www.w3.org/1999/xhtml\\\"><h1>Operation Outcome</h1><table border=\\\"0\\\"><tr><td style=\\\"font-weight: bold;\\\">INFORMATION</td><td>[]</td><td><pre>Successfully created resource \\\"Patient/4705560/_history/7\\\" in 5ms</pre></td>\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t</tr>\\n\\t\\t\\t<tr>\\n\\t\\t\\t\\t<td style=\\\"font-weight: bold;\\\">INFORMATION</td>\\n\\t\\t\\t\\t<td>[]</td>\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t<td><pre>No issues detected during validation</pre></td>\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t</tr>\\n\\t\\t</table>\\n\\t</div>\"\n },\n \"issue\": [\n {\n \"severity\": \"information\",\n \"code\": \"informational\",\n \"diagnostics\": \"Successfully created resource \\\"Patient/4705560/_history/7\\\" in 5ms\"\n },\n {\n \"severity\": \"information\",\n \"code\": \"informational\",\n \"diagnostics\": \"No issues detected during validation\"\n }\n ]\n}"
Run Code Online (Sandbox Code Playgroud)
邮政:
主窗口.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFile>
#include <QMessageBox>
#include <QNetworkReply>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(&manager, &QNetworkAccessManager::finished, this, &MainWindow::onManagerFinished);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
QNetworkRequest request(QUrl("http://hapi.fhir.org/baseDstu3/Patient")); // without ID
request.setRawHeader("Content-Type", "application/fhir+json");
QFile file("/path/of/themostsimplepatientJSON.json");
if(file.open(QIODevice::ReadOnly)){
QByteArray ba = file.readAll();
manager.post(request, ba);
}
}
void MainWindow::onManagerFinished(QNetworkReply *reply)
{
qDebug()<< reply->readAll();
}
Run Code Online (Sandbox Code Playgroud)
输出:
"{\n \"resourceType\": \"OperationOutcome\",\n \"text\": {\n \"status\": \"generated\",\n \"div\": \"<div xmlns=\\\"http://www.w3.org/1999/xhtml\\\"><h1>Operation Outcome</h1><table border=\\\"0\\\"><tr><td style=\\\"font-weight: bold;\\\">INFORMATION</td><td>[]</td><td><pre>Successfully created resource \\\"Patient/4728838/_history/1\\\" in 3ms</pre></td>\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t</tr>\\n\\t\\t\\t<tr>\\n\\t\\t\\t\\t<td style=\\\"font-weight: bold;\\\">INFORMATION</td>\\n\\t\\t\\t\\t<td>[]</td>\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t<td><pre>No issues detected during validation</pre></td>\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t</tr>\\n\\t\\t</table>\\n\\t</div>\"\n },\n \"issue\": [\n {\n \"severity\": \"information\",\n \"code\": \"informational\",\n \"diagnostics\": \"Successfully created resource \\\"Patient/4728838/_history/1\\\" in 3ms\"\n },\n {\n \"severity\": \"information\",\n \"code\": \"informational\",\n \"diagnostics\": \"No issues detected during validation\"\n }\n ]\n}"
Run Code Online (Sandbox Code Playgroud)
完整的示例可以在以下链接中找到
| 归档时间: |
|
| 查看次数: |
13274 次 |
| 最近记录: |