使用RESTful Web服务的Traverson Library会引发JSONPath

时间:2015-05-26 13:50:48

标签: web-services rest spring-boot

我目前正试图让 traverson library从SpringBoot提供的REST界面中获取一些信息。

我现在的目标是让 traverson 遵循道路 http:// localhost / users并使用此代码获取信息

traverson.from('http://localhost:8090')
    .json()
    .follow('$._links.user')
    .getResource(function(err, resource){
        if(err){
            console.log(err);
            return;    
        }
        console.log(resource);        
    });

调用端点时返回的json结构如下所示:

{
  "_links" : {
    "ressource" : {
      "href" : "http://localhost:8090/ressource{?page,size,sort}",
      "templated" : true
    },
    "user" : {
      "href" : "http://localhost:8090/user{?page,size,sort}",
      "templated" : true
    },
    "alert" : {
      "href" : "http://localhost:8090/alert{?page,size,sort}",
      "templated" : true
    }
}

不幸的是,这会导致错误:

Uncaught TypeError: a.step.url.search is not a function

但是,如果我只是在没有JSONPath语法的情况下获取端点,它就会提供我提到的结构。 当我弄乱JSONPath Expression时,它会产生更明智的错误:

[Error: JSONPath expression $.links.user returned no match in document:
{"_links":{"ressource":{"href":"http://localhost:8090/ressource{?page,size,sort}
","templated":true},"user":{"href":"http://localhost:8090/user{?page,size,sort}"
,"templated":true},"alert":{"href":"http://localhost:8090/alert{?page,size,sort}
","templated":true}}]

我可能会错过一些非常明显的东西......

至少感谢你阅读这篇文章:)

1 个答案:

答案 0 :(得分:0)

可能涉及的人, 经过一些反复试验后,你必须非常小心你提供的JSON Path表达式。

traverson.from('http://localhost:8090')
        .json()
        .follow('$._links.user.href')
        .getResource(function(err, resource){
            if(err){
                console.log(err);
                return;    
            }
            console.log(resource);        
        });

这将在以下情况下有效:

traverson.from('http://localhost:8090')
        .json()
        .follow('$._links.user')
        .getResource(function(err, resource){
            if(err){
                console.log(err);
                return;    
            }
            console.log(resource);        
        });

不会。 原因似乎是$ ._ links.user指向一个对象而不是一个对象属性(参见上面的端点结构)。这会导致遍历库中的评估函数导致一些无法理解的错误。

让我们希望有人可以利用这些信息,而不是花费数小时沉思。

编辑1:在向图书馆所有者填写问题后,现在应该更长时间地发生此问题