使用Spring Boot,我得到了具有其他实体作为字段的实体的意外链接。简明的例子:
@Entity Foo { ... }
interface FooRepository extends CrudRepository<Foo, Long> ...
@Entity Bar {
@ManyToOne
Foo foo;
...
}
interface BarRepository extends CrudRepository<Bar, Long> ...
在获取Bar
实体时,响应包含以下链接:
{
...
"_links": {
"self": {
"href": "http://localhost:9001/bars/1"
},
"bar": {
"href": "http://localhost:9001/bars/1"
},
"foo": {
"href": "http://localhost:9001/bars/1/foo"
}
}
}
对于“foo”链接,我原本希望将Foo
实体的URI作为链接,即<host>/foo/<id>
而不是<host>/bars/1/foo
。两个链接都提供完全相同的响应。 HAL规范中的示例显示了预期的行为,我也发现它更有用,例如,如果我想在客户端进行缓存。对同一资源使用不同的URI似乎没有帮助。
这种行为背后的原因是什么?有人能指出我的相关文档吗?