RepositoryRestResource批注中的可选元素(例如collectionResourceRel)中的“ rel”是什么意思?

时间:2019-05-30 14:06:36

标签: spring spring-boot spring-data-rest

能否请您帮助我理解RepositoryRestResource批注的collectionResourceRel中提到的“ rel”可选元素的含义? 我已经阅读过Java文档here

下面是文档中写的内容。

  

collectionResourceRel生成指向以下链接的关联值   收集资源。

2 个答案:

答案 0 :(得分:3)

基本上rel@RestResource批注的属性。意思是“关系”

例如订单可能具有将订单链接到其客户的"rel" : "customer"关系。

来自https://docs.spring.io/spring-data/rest/docs/current/reference/html/

例如,在默认配置中,如果您向http://localhost:8080/persons/search发出请求以了解公开了哪些查询方法,则会返回类似于以下内容的链接列表:

{
  "_links" : {
    "findByName" : {
      "href" : "http://localhost:8080/persons/search/findByName"
    }
  }
}

要更改rel的值,请使用rel批注上的@RestResource属性,如以下示例所示:

@RepositoryRestResource(path = "people")
interface PersonRepository extends CrudRepository<Person, Long> {

  @RestResource(path = "names", rel = "names")
  List<Person> findByName(String name);
}

前面的示例将产生以下链接值:

{
  "_links" : {
    "names" : {
      "href" : "http://localhost:8080/persons/search/names"
    }
  }
}

您可以更改存储库的版本,如以下示例所示:

@RepositoryRestResource(path = "people", rel = "people")
interface PersonRepository extends CrudRepository<Person, Long> {

  @RestResource(path = "names", rel = "names")
  List<Person> findByName(String name);
}

更改存储库的关系将更改顶级名称,如以下示例输出所示:

{
  "_links" : {
    "people" : {  // rel = "people"
      "href" : "http://localhost:8080/people"
    },
    …
  }
}

rel = "people"将该链接的名称更改为people

问:您是否有一个示例显示“订单可能具有将订单链接到其客户的“ rel”:“ customer”关系”?是否还会考虑OneToMany,ManyToMany等实体之间的关系?

它不同于OneToMany,ManyToMany等实体之间的关系。

该关系描述了当前资源与目标资源的关联方式。

这是https://restfulapi.net/hateoas/理解rel的一个很好的例子:

以下给出的JSON响应可能来自HTTP GET http://api.domain.com/management/departments/10之类的API

{
    "departmentId": 10,
    "departmentName": "Administration",
    "locationId": 1700,
    "managerId": 200,
    "links": [
        {
            "href": "10/employees",
            "rel": "employees",
            "type" : "GET"
        }
    ]
}

在前面的示例中,服务器返回的响应包含指向员工资源10 /雇员的超媒体链接,客户端可以遍历该链接以读取属于该部门的雇员。

它位于表示层和数据层之间。借助rel和其他属性创建的链接:

{
    "href": "10/employees",
    "rel": "employees",
    "type" : "GET"
}

帮助应用程序朝正确的方向(存储库,方法等)检索数据(属于部门的员工)

根据您的设计,您还可以在数据层中的实体之间创建关系。但这是不同的东西。

答案 1 :(得分:1)

HATEOAS API中,rel“描述了当前上下文(源)与目标资源之间的关系”

https://restfulapi.net/hateoas/