【发布时间】: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) 填充的内容。
我想在请求有效负载中进行相同的比较。现在的挑战是
- 内容可能是 XML 或 JSON,稍后可能是其他的。
- 内容之间可能包含空格
- 顺序将不同或不同的 xml 命名空间
- 它将包含动态变量值以与静态比较
- 如何从负载中检索动态变量值
我知道我可以使用 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