有没有人知道spel是否可以像xpath一样用作查询语言?
我的用例是我正在使用Spring RestTemplate
来对我们正在编写的应用程序进行集成测试的http请求。响应数据是json,而不是创建响应绑定的少数几个域类,我将响应绑定到标准java.util.Map
(简化)典型响应可能如下所示:
{
'links': [
{
'rel':'self',
'href':'http://somesite.com:49156/places',
'lastModified':'2014-11-27T21:42:49Z'
},
{
'rel':'place',
'href':'http://somesite.com:49156/places/2345',
'lastModified':'2014-11-27T21:42:49Z'
}
]
}
鉴于此数据绑定到Map,我们可以根据调用Map等的get方法编写断言。
例如,如果我想断言'self'链接的href是'http://somesite.com:49156/places',我将不得不:
List<Map>
唷!凌乱,脆弱,令人讨厌的代码!在很多层面都很糟糕!
所以,我现在想看看spel是否可以帮助我
我仍然喜欢将json响应绑定到一个好的通用Map
的想法,因为我们将测试许多不同的端点,而响应对象图可能非常复杂 - 总而言之我们最终会很多很多的pojo's
虽然测试简单地调用getter和其他类似的辅助方法非常方便,但似乎没有必要创建很多很多类。
所以绑定到Map
很容易,因为它不涉及任何工作:)但是如何测试它......
如果这是XML(不是),我们可以按照以下方式编写一个xpath查询:
//links/link[rel='self']/href
所以如果可以的话,我想尝试用spel做类似的事情。
[links]
会返回List
Map
的<{1}} [links][0]
将获得List
[links][0][href]
将从第一张地图中获取条目,其中键为'href'但我需要能够有效地将表达式的[0]
部分替换为“让我成为'rel'条目具有'self'值的人 - 我基本上想要使用spel作为查询语言。
有人知道这是否可行?
谢谢, 森
PS。由于这是一个Spring项目,我已经了解了MockMvc和JsonPath。 MockMvc在这种情况下是不正确的,因为这些测试是完整的端到端,所以不需要模拟任何东西。回复:JsonPath,这个项目的技术主管非常不喜欢它,所以我被要求调查替代方案:(