如何使用 JavaScript / AngularJS 访问 _embedded 资源中的 HAL _links

How to access HAL _links within _embedded resources with JavaScript / AngularJS

我很欣赏有几个库可以使用 HAL 格式的 HATEOAS linkrels,但我很想了解更多关于访问 _embedded 资源及其最基本的 _links 的信息 - 或者我想我应该说天真 -方法。

例如,我有以下 "usersResource" ($http) Spring HATEOAS 输出:

{  
   "_embedded":{  
      "userList":[  
         {  
            "username":"admin",
            "roles":[  
               "ADMIN"
            ],
            "_links":{  
               "self":{  
                  "href":"http://localhost:8081/users/admin"
               },
               "password":{  
                  "href":"http://localhost:8081/users/admin/password"
               },
               "delete":{  
                  "href":"http://localhost:8081/users/admin"
               }
            }
         }
      ]
   },

   "_links":{  
      "self":{  
         "href":"http://localhost:8081/users"
      },
      "create":{  
         "href":"http://localhost:8081/users"
      }
   }
}

如果我 运行 像 usersResource.$hasEmbedded("userList") 或 usersResource.$hasLink("create") 这样简单的东西,我可以毫无问题地得到 true。

如果我再尝试一些更冒险的事情,比如 usersResource.$request().$get("userList") 我会得到一个资源对象,但我很难以任何有意义的方式使用该对象。

例如,如果我想检查我的管理员用户是否存在 "password" linkrel,有什么方法可以使用返回的资源对象并对其调用 $hasLink 吗?

感谢评论!

所以无论如何,我后来才注意到 usersResource.$request().$get("userList") 调用返回的对象是一个数组。那么这只是循环遍历数组以获取 $hasLink 等方法的问题。在我的例子中,我只需要到达第一个 [index 0] 对象。这成功了:

usersResource.$request().$get("userList")
            .then(function (users) {

                vm.users = users;

                console.log("$hasLink 'delete'");
                console.log(users[0].$hasLink("delete")); //return true

                }
            );