Delphi DataSnap 框架向 JSON 消息添加内容

2024-03-06

我正在使用 Delphi XE DataSnap REST 服务器并尝试返回 JSON 序列化对象。我的方法返回给客户端的结果如下所示:

{"type":"ServerMethodsUnit1.TJSONIssue",
 "id":1,
 "fields":{
           "FIssueNo":90210,
           "FTitle":"Beverly Hills...that''s where I want to be",
           "FKind":"Wishlist"
          }
}

格式良好的 JSON。

问题是,当客户端收到消息时,会添加一堆内容,如下所示:

{"result": ["{\"type\":\"ServerMethodsUnit1.TJSONIssue\",
              \"id\":1,
              \"fields\":{
                          \"FIssueNo\":90210,
                          \"FTitle\":\"Beverly Hills...that's where I want to be\",
                          \"FKind\":\"Wishlist\"}
             }
            "
           ]
}

我收到一堆反斜杠字符"result"前面有标签。

我想知道是否有人知道为什么我会得到这些额外的东西以及如何摆脱它。


为了摆脱"result"你应该使用的标签OnFormatResult的事件TDSHTTPWebDispatcher。尤其是价值Handled。的价值Handled is false默认情况下。如果设置为true,那么传递给用户的结果将不会被包装在"result"JSON 对象。如果为 false,则它将被包装在该对象中。

例子。我有这样的代码:

function TServerMethods1.EchoStringJSON(Value: string): TJSONObject;
var
  JSONObj : TJSONObject;
begin
  JSONObj := TJSONObject.Create;
  JSONObj.AddPair(TJSONPair.Create('name',Value));
  result := JSONObj;
end;

REST 服务响应如下所示:{"result":[{"name":"asdfasdf"}]}

I add Handled := true;:

procedure TWebModule1.DSHTTPWebDispatcher1FormatResult(Sender: TObject;
  var ResultVal: TJSONValue; const Command: TDBXCommand; var Handled: Boolean);
begin
  Handled := true;
end;

REST 服务响应如下所示:[{"name":"asdfasdf"}].

还有"[]"。所以我添加一些额外的代码:

procedure TWebModule1.DSHTTPWebDispatcher1FormatResult(Sender: TObject;
  var ResultVal: TJSONValue; const Command: TDBXCommand; var Handled: Boolean);
var
  Aux: TJSONValue;
begin
  //remove [] element
  Aux := ResultVal;
  ResultVal := TJSONArray(Aux).Items[0];
  TJSONArray(Aux).Remove(0);
  Aux.Free;
  //we do not need "result" tag
  Handled := true;
end;

现在结果看起来像:{"name":"asdfasdf"}

附言。答案在这里找到:REST 响应的 FormatResult 事件部分 http://mathewdelong.wordpress.com/2011/09/15/delphilive-2011-recap/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Delphi DataSnap 框架向 JSON 消息添加内容 的相关文章

随机推荐

  • “参数类型‘C’可能不会存在足够长的时间”,当它不需要时

    我正在用 Rust 编写非常基本的人工智能系统 其主要组成部分有 Actions 可以由库用户实现 用于特定用途 Generic Context 它被传递给所有动作 并且只需要在动作执行期间存在 ActionsContainer 它 全局
  • Java 中的基数参数是什么?它是如何工作的?

    我理解该函数的基数Integer parseInt 是将字符串转换成的基数 用基数 基数 16 转换的 11 基数 10 不应该是B代替17 下面的代码根据课本打印17 public class Test public static voi
  • iOS显示tableview标题图像(视差效果)

    我正在尝试设置一个大图像 随着表格视图进一步拉低 可以显示更多信息 我知道我没有任何意义 它更容易显示我从 netbot 记录的一个例子 http vine co v bdKrALdOheD 请让我知道正确的术语是什么 我将更新标题 Upd
  • Task.perform 期望第三个参数是不同的类型

    我正在尝试将 Elm 教程改编为我自己的小项目 但我在使用我提供的 Json Decoder 时遇到了麻烦 我的代码如下所示 type Msg RetrieveComments FetchSucceed String FetchFail H
  • Hibernate:多个结果集

    从我在 Hibernate 文档 在线中读到的内容来看 听起来 Hibernate 没有处理多个结果集的能力 我希望在依赖 Hibernate 的应用程序中进行 MySQL DB 调用 这将返回多个结果集 您使用过哪些解决方案可以与 Hib
  • Eclipse 不会将 jar 部署到 WEB-INF/lib 目录中

    为了将 JSF 与 Spring 集成 我在中添加了这些行web xml
  • 使用 prometheus 和 grafana 跟踪事件

    有一篇文章 跟踪每个版本 https codeascraft com 2010 12 08 track every release 它讲述了如何在每个代码部署的图表上显示一条垂直线 他们正在使用石墨 我想用 Prometheus 2 2 和
  • OpenCV 从 BGR 颜色转换为灰度时出错

    我正在尝试使用以下代码将图像从 BGR 转换为灰度格式 img cv2 imread path to image file gray cv2 cvtColor img cv2 COLOR BGR2GRAY 这似乎工作正常 我检查了数据类型i
  • 没有 php.ini 与brew

    我用brew安装了PHP7 它说 The php ini file can be found in usr local etc php 7 0 php ini 但我在那里什么也没看到 所以我确认了php fpm i Configuratio
  • 嵌入、嵌入高级或动态地图之间的区别

    我正在使用 Google Maps Javascript API 将地图添加到网站 现在 当谷歌改变他们的价格时 我不确定我的极限是多少 这site https cloud google com maps platform pricing
  • 如何刷新 DbContext

    我想刷新我的所有实体DbContext在没有重新创建它的情况下 我尝试了以下操作 但没有一个有意义 var context IObjectContextAdapter myDbContext ObjectContext var refres
  • 在 Windows 上构建 Boost

    我正在尝试使用 mingw 在 Windows 7 x64 机器上构建 boost 库 当我尝试运行 b2 时 b2 build dir C boost build toolset gcc with python 构建库时出现错误 Jamr
  • C# 在包含任何字符的设置中序列化 List 的方法 (Regex/xml)

    我正在寻找一种简洁 干净的方法将字符串列表存储到C 设置 http msdn microsoft com en us library aa730869 28VS 80 29 aspx文件 据我所知 您无法将 List 对象存储到这些设置中
  • SQL Server 2005中的连接错误

    我有一个问题 我运行应用程序 C 并收到错误 与网络相关或 发生特定于实例的错误 建立与 SQL 的连接 服务器 找不到服务器或 无法访问 验证 实例名称正确且 SQL 服务器配置为允许远程 连接 提供商 SQL 网络 接口 错误 26 错
  • 如何将 iMessage 扩展的 sqlite 存储文件下载到 MacBook

    我们正在开发 iMessage 扩展 它成功地使用了核心数据 我们需要评估 store sqlite 文件 但找不到它 我们尝试这样找到它 在 Xcode 中 窗口 gt 设备 In Installed Apps 选择我们的扩展 Downl
  • 如何使用 gmock 测试类是否调用其基类的方法

    class Foo public int x int y void move void class SuperFoo public Foo public int age void update SuperFoo update void mo
  • 自定义验证在版本 4.1.1 的联系表单 7 中不起作用

    我必须在联系表单 7 中制作一个带有自定义验证字段的表单 它不适用于联系表单 7 的最新版本 4 1 1 但适用于旧版本 我创建了一个用于从表单获取优惠券代码的字段 如果优惠券是从 HIP 开始的 我想验证该条目 我的代码如下 add fi
  • 如何“git pull”到非当前分支的分支?

    当你跑步时git pull on the master分支 它通常从origin master 我在另一个名为newbranch 但我需要运行一个执行以下操作的命令git pull from origin master into maste
  • 重新启动 kube-proxy 等待条件

    在 Windows 10 中运行 minikube start 时 出现以下错误 错误 重新启动集群时出错 重新启动 kube proxy 等待 kube proxy 启动以进行 configmap 更新 等待条件超时 请帮我解决给定的问题
  • Delphi DataSnap 框架向 JSON 消息添加内容

    我正在使用 Delphi XE DataSnap REST 服务器并尝试返回 JSON 序列化对象 我的方法返回给客户端的结果如下所示 type ServerMethodsUnit1 TJSONIssue id 1 fields FIssu