Java Spring EL可以用作有效的查询语言吗?
有人知道spel是否可以像xpath一样用作查询语言吗 我的用例是,我使用SpringRESTTemplate发出http请求来集成测试我们正在编写的应用程序。响应数据是json,我将响应绑定到标准java.util.Map,而不是创建响应绑定到的少数域类 简化的典型响应可能如下所示:Java Spring EL可以用作有效的查询语言吗?,java,spring,spring-el,Java,Spring,Spring El,有人知道spel是否可以像xpath一样用作查询语言吗 我的用例是,我使用SpringRESTTemplate发出http请求来集成测试我们正在编写的应用程序。响应数据是json,我将响应绑定到标准java.util.Map,而不是创建响应绑定到的少数域类 简化的典型响应可能如下所示: { 'links': [ { 'rel':'self', 'href':'http://somesite.com:49156/places
{
'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'
}
]
}
假设这些数据绑定到一个映射,我们可以基于调用映射的get方法等编写断言。
例如,如果我想断言'self'链接的href是,我必须:
调用响应主体映射上的.getlinks,并将其强制转换为列表
循环遍历结果列表,对于作为映射的每个条目,调用.getrel并检查其值是否为self
一旦我有了正确的映射,即“self”链接,我就会调用.gethref,并根据我的期望值断言它的值
呸!凌乱、脆弱、恶心的代码!这在很多方面都很糟糕
所以,我现在想看看斯佩尔能不能帮我。
我仍然喜欢将json响应绑定到一个很好的通用映射的想法,因为我们有很多不同的端点,我们将针对这些端点进行测试,而响应对象图可能非常复杂——总之,我们最终会得到很多很多pojo。
虽然测试只调用getter和其他类似的helper方法会非常方便,但似乎不需要创建大量的类。
所以绑定到地图很容易,因为它不涉及任何工作:但是如何测试它
如果这是XML,而不是XML,那么我们可以按照以下方式编写xpath查询:
//links/link[rel='self']/href
因此,如果可以的话,我想尝试与spel做一些类似的事情
表达式[links]将返回地图列表
表达式[links][0]将获得列表中的第一个条目
表达式[links][0][href]将从第一个映射中获取条目,该映射的键为“href”
但我需要能够有效地将表达式的[0]部分替换为“让我找到其'rel'条目具有'self'值的那一个”—我基本上希望使用spel作为查询语言
有人知道这是否可能吗
谢谢,
内森
由于这是一个Spring项目,我已经了解了MockMvc和JsonPath。在这种情况下,MockMvc是不正确的,因为这些测试是完全端到端的,所以不需要模拟任何东西。Re:JsonPath,这个项目的技术负责人非常不喜欢它,所以我被要求调查替代方案:为什么不使用JSON指针?例如,杰克逊支持他们。同样对于访问bean属性,我更喜欢使用SpEL而不是SpEL。SpEL更强大,但似乎您只想解析属性路径。好的。。。我没有很长时间把这个问题通读一遍。您确实希望具有类似于XPath的基于查询的功能。这在SpEL中是绝对不可能的。谢谢@PavelHoral-是的,你是对的,我是在查询类似于XPath的内容之后。感谢您确认SpEL不会在这方面帮助我。为了完整性,上面的示例查询可以很容易地通过JsonPath实现,比如JsonPath.readmap,$.links[?@.rel=='self']。href我需要了解更多关于技术负责人对JsonPath的详细信息。。。