我正在实现模拟http响应服务器。服务器必须验证输入的请求URL和有效负载,然后将请求与配置的响应进行匹配,然后将其返回给调用方。
我需要帮助来验证带有静态标记化有效负载的http请求动态内容有效负载。 因此,当我收到请求有效载荷时说json时,将其与配置的标记化内容进行比较,如果不匹配则返回失败。
例如,我正在使用以下代码对请求网址进行同样的操作。
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解析器进行比较,但是如何将静态变量与内容内部的动态变量进行比较并检索呢?
例如e)静态{"name" : "$name", "age" : "$age"}
例如e)动态{"name" : "Bob", "age" : 47}
有没有我可以传递静态和动态内容的工具,并且我将获得isMatched并在如上所示的uriTemplate示例的地图中检索动态常量?
在比较和提取动态字段方面给我一些提示/想法吗?
答案 0 :(得分:3)
XML和JSON是结构的序列化表示。
您引用的动态内容实际上是该结构的一个实例。我认为您正在寻找的是XML的XSD / DTD [1](定义结构的类型)和JSON的json-schema [3]。
这里有多种策略。取决于要验证的服务。您可以将json转换为xml,并使用相同的XSD来验证这两种序列化方法。有多种框架可以帮助您实现这一目标。但是,第一步是编写这些模式(对于XML为XSD / DTD,对于JSON为json-schema)。