【问题标题】:Compare dynamic XML/JSON content with static tokenised payload and retrieve token values将动态 XML/JSON 内容与静态标记化有效负载进行比较并检索标记值
【发布时间】:2018-12-11 07:11:32
【问题描述】:

我正在实现模拟 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());

    }

输出:

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 示例?

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

【问题讨论】:

  • URL 是简单的字符串。 XML 和 JSON 是复杂的结构。虽然以几乎与使用正则表达式相同的方式验证 URL 是否匹配某些字符串规则可能是有意义的,但 XML 和 JSON 不能那样工作。您不会尝试将您的 XML 或 JSON 与某物匹配。您只需使用 JAXB 或 Jackson 或解析器将它们 解析绑定 到一个类,然后从结果中提取信息。换句话说,只需按照任何有关如何使用 Java 制作 Web 服务的教程进行操作即可。他们会告诉你如何接收 XML/JSON 数据。
  • @kumesana 谢谢!是的,我知道 XML 和 JSON 的标准解析。但是如果我已经有一些模板,想知道如何从中动态检索令牌?
  • 您还没有模板。或者如果你这样做了,就把它们扔掉,因为它们不起作用,你不应该走那条路。所以,假设不是很有用。像其他人一样做。它起作用的唯一原因是每个人都已经这样做了。他们称之为“标准”。

标签: java json xml parsing text-parsing


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢!加一。是的,我正在考虑它,并检查更好的工具,是否需要检查 XSD 才能处理 json?
猜你喜欢
  • 1970-01-01
  • 2021-01-13
  • 1970-01-01
  • 2020-12-26
  • 2015-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多