Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring EL可以用作有效的查询语言吗?_Java_Spring_Spring El - Fatal编程技术网

Java Spring EL可以用作有效的查询语言吗?

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

有人知道spel是否可以像xpath一样用作查询语言吗

我的用例是,我使用SpringRESTTemplate发出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'
        }
    ]
}
假设这些数据绑定到一个映射,我们可以基于调用映射的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的详细信息。。。