将动态 XML/JSON 内容与静态标记化负载进行比较并检索标记值

2024-03-07

我正在实现模拟 http 响应服务器。服务器必须验证输入请求 URL 和有效负载,然后将请求与配置的响应相匹配,然后将其返回给调用者。

因为我需要帮助使用静态标记化有效负载验证 http 请求动态内容有效负载。 因此,当我收到请求负载(如 json)时,将其与配置的标记化内容进行比较,如果不匹配则返回失败。

例如)我使用下面的代码对请求 url 执行相同的操作。

import java.util.HashMap;
import java.util.Map;
import org.springframework.web.util.UriComponentsBuilder;
import org.springframework.web.util.UriTemplate;


    public static void main(String[] args) {
        //template url
        String template = "/name/{name}/age/{age}";
        UriTemplate uriTemplate = new UriTemplate(template);

        //actual url
        String uri = "/name/Bob/age/47";
        Map<String, String> parameters = new HashMap<>();

        //returns Map
        System.out.println("Dynamic Content Map: " + uriTemplate.match(uri));
        System.out.println("URL Matched: " +uriTemplate.matches(uri));

        parameters.put("name", "Foo");
        parameters.put("age", "37");

        UriComponentsBuilder builder = UriComponentsBuilder.fromPath(template);
        System.out.println(builder.buildAndExpand(parameters).toUriString());

    }

OUTPUT:

Dynamic Content: {name=Bob, age=47}
URL Matched: true
/name/Foo/age/37

因此,如果您查看此代码,UriTemplate 能够将配置的静态内容(姓名/年龄)与动态值 (Bob/47) 填充的内容进行比较。

我想在请求负载中进行相同的比较。现在的挑战是

  1. 内容可能是 XML 或 JSON,稍后可能是其他内容。
  2. 内容之间可能包含空格
  3. 顺序将不同或不同的 xml 名称空间
  4. 它将包含动态变量值以与静态进行比较
  5. 如何从负载中检索动态变量值

我知道我可以使用 XML 和 JSON 解析器进行比较,但如何比较内容中的静态变量和动态变量并检索它?

例如)静态{"name" : "$name", "age" : "$age"}

例如)动态{"name" : "Bob", "age" : 47}

有没有什么工具可以传递静态和动态内容,并且我将获得 isMatched 并检索地图中的动态常量,如上面显示的 uriTemplate 示例?

给我一些关于比较和提取动态字段的提示/想法吗?


XML 和 JSON 是结构的序列化表示。

The dynamic您引用的内容实际上是该结构的一个实例。

我认为您正在寻找的是用于 XML 的 XSD/DTD [1](定义结构的类型)和用于 JSON 的 json-schema [3]。

这里有多种策略。取决于要验证的服务。您可以将 json 转换为 xml 并使用相同的 XSD 来验证两种序列化方法。有各种框架可以帮助您实现这一目标。然而,第一步是编写这些模式(用于 XML 的 XSD/DTD 和/或用于 JSON 的 json-schema)。

  • [1] - 维基百科:XML 模式 https://en.wikipedia.org/wiki/XML_schema
  • [2] - XML 和 XSD 有什么区别? https://stackoverflow.com/questions/2333998/what-is-the-difference-between-xml-and-xsd/2339660#2339660
  • [3] - json 模式 http://json-schema.org/
  • [4] - 如何验证 REST 服务内传入的 JSON 数据? https://stackoverflow.com/questions/18154983/how-do-i-validate-incoming-json-data-inside-a-rest-service
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将动态 XML/JSON 内容与静态标记化负载进行比较并检索标记值 的相关文章

随机推荐

  • 将正则表达式与 NSPredicate 结合使用

    Aim Using NSPredicate我想使用正则表达式来匹配所有以 Test 开头的字符串 我特别想用Regex and NSPredicate 问题 我犯了什么错误 使用正则表达式来实现我想要做的事情的正确方法是什么 代码 我的尝试
  • 从 Git 存储库克隆后的 Laravel Sail

    我目前有自己的 Laravel 应用程序在 Docker 上运行 在 Windows 11 上使用 Laravel sail 在 WSL2 上使用 Ubuntu 这工作正常并且符合预期 我已将我的工作推送到 Git 存储库 但如何将其拉到新
  • 添加页面时,refinerycms 不工作

    尝试使用 RefineryCMS 从仪表板添加新页面时出现此错误 SQLite3 ConstraintException refinery page translations refinery page id 不得为 NULL INSERT
  • FtpWebRequest ListDirectory 不返回所有文件

    我正在尝试从包含大约 9000 个文件的 FTP 位置检索文件列表 但下面的代码总是只给出 97 个文件 在第 98 个文件的循环开始时 StreamReader Peek 变为 1 输出 test txt 始终仅包含前 97 个文件 就像
  • 创建没有版本号的 Grails 3 WAR

    在 Grails 2 中 我们可以像这样定义 WAR 文件名 grails project war file target appName war 如何覆盖 Grails 3 中的 war 文件名 谢谢杰夫 我在 build gradle
  • 动态生成的 IL 中的值类型转换

    Update一年多后 我终于意识到了这种行为的原因 本质上 一个对象不能被拆箱为与它不同的类型 被装箱为 即使该类型强制转换或转换为目标 类型 如果你不知道正确的类型 你必须发现它 不知何故 作业可能完全有效 但不可行 让这一切自动发生 例
  • NUXT:使用 Markdown-it 显示相对于 Markdown 内容的图像

    这是 Nuxt 的纯静态实现 我正在使用从 yaml 内容文件 不是 markdown 读取的 markdown 内容 由于内容位于 json 对象中 因此它们正在使用 md render blog content 假设 blog cont
  • 改变正方形相交区域的颜色

    这些天我正在做一个项目 我的目标是改变两个正方形相交区域的颜色 我已经编写了检测两个正方形相交的代码 但我不知道如何更改相交区域的颜色 请帮我解决这个问题 var sketch function p with p let squares l
  • vue-cli-service 服务的依赖问题

    当我尝试构建 VueJS typescript 应用程序时 出现以下依赖项错误 vue cli service 服务 信息正在启动开发服务器 正在启动类型检查和 linting 服务 使用 1 个工作线程 内存限制为 2048MB 发出 C
  • 使 Jackson 在 JSON 中的重复属性上失败

    I use Jackson将 JSON 反序列化为不可变的自定义 Java 对象 这是课程 final class DataPoint private final int count private final int lower priv
  • 如果值是 `let` 常量,为什么我只能直接使用元组名称附加元组数组 - Swift

    这是我正在谈论的一个例子 typealias SomeTuple string String int Int var tupleArray SomeTuple Fails tupleArray append string Hello int
  • 使用 AWS Boto3 从 EC2 实例调用 API 网关

    我正在尝试从具有 IAM 角色的 EC2 实例之一调用 AWS API Gateway 端点 我在 EC2 实例上安装了 boto3 库 并尝试使用下面的代码执行简单的网关 API 但仍然出现身份验证丢失错误 import boto3 im
  • 合并两个数组并按日期对这个新数组进行排序

    我有两个数组 第一 Array 0 gt Array date gt 2012 01 10 result gt 65 name gt Les oc ans 1 gt Array date gt 2012 01 11 result gt 75
  • ASP.NET Web 窗体 - 模型视图演示器和用户控件

    我是使用 MVP 模式的新手 我只是想确保从用户控件中调用演示者的最佳方式 我的页面 aspx有主持人我的演讲者 该页面包含一个用户控件 该控件通过我从 MyPage 设置的属性接受 MyPage 的 Presenter MyUserCon
  • 让 Glassfish 响应 ajax 请求 JSF 2

    我正在尝试向我的服务器 Glassfish v3 1 开源版 发出 ajax 请求 并且出于任何原因 该请求永远不会发送到服务器 在 tomcat 7 上运行相同的项目它可以正常工作 有任何我应该配置的配置在glassfich或其他东西上制
  • “嵌入式 dylibs/frameworks 仅在 iOS 8 或更高版本上运行”警告的后果

    使用 Xcode 6 x 我们可以使用 CocoaTouch Framework 模板来构建框架库 Xcode 会在我们构建时为我们创建 framework 这非常棒 在我们的框架中 我们希望支持 iOS 7 1 及更高版本 因此对于部署目
  • 友元模板函数(在非模板类中),C++

    如果我有一个非模板 即 正常 类并希望有一个模板友元函数 我该如何编写它而不导致编译器错误 这是一个例子来说明我正在尝试做的事情 template
  • 有效地计算每个数字范围内的数字

    我正在寻找更快的解决方案来解决以下问题 我将用一个小例子来说明问题 然后提供模拟大数据的代码 因为这就是这个问题的重点 我的实际问题大小是列表长度 100 万个条目 比如说 我有两个列表 如下所示 x lt list c 82 18 c 3
  • .NET 可移植性分析器与 .NET API 浏览器结果不匹配

    我在 NET 可移植性分析器 VS 扩展 和官方 NET API 浏览器之间有冲突的结果 https learn microsoft com en us dotnet api https learn microsoft com en us
  • 将动态 XML/JSON 内容与静态标记化负载进行比较并检索标记值

    我正在实现模拟 http 响应服务器 服务器必须验证输入请求 URL 和有效负载 然后将请求与配置的响应相匹配 然后将其返回给调用者 因为我需要帮助使用静态标记化有效负载验证 http 请求动态内容有效负载 因此 当我收到请求负载 如 js