我有一个包含id,firstName,lastName:
的Person.java
类
根据文档,如果我希望有hateoas链接,分页和计数,我应该使用PersonResource
:
https://docs.spring.io/spring-hateoas/docs/current/reference/html/#fundamentals.resources
与Person
是一回事吗?
我应该如何处理我的ID,ResourceSupport
已经实施了getId()
方法。
答案 0 :(得分:1)
您的域对象的ID和REST资源的ID是两个完全不同的东西。
正如Spring HATEOAS API文档中所提到的,Resource是围绕域对象的包装器,它添加了链接。 资源是REST的基本概念。这是an object with a type, associated data, relationships to other resources, and a set of methods that operate on it。
基本上,它的id是用于与GET / PUT / POST / DELETE方法交互的URL。
包装到资源(PersonResource)中,是您的域对象(Person),带有属性和getter / setter的POJO:
// simple definition of a Person Resource in Spring
public class PersonResource extends Resource<Person> {
public PersonResource(Person content, Link... links) {
super(content, links);
}
}
public class Person {
...
String name;
Integer age;
// getters/setters omitted for clarity
}
REST API通常用于访问和更新存储在数据库表(SQL)或集合(NoSQL)中的数据。这样的实体有一个唯一的id,你映射到你的POJO的id属性:
public class Person {
@Id
String id;
String name;
Integer age;
// getters/setters omitted for clarity
}
默认情况下,当您询问REST API时,Spring Data Rest甚至不会公开您的实体ID(在REST上下文中它是没有意义的,重要的是您如何识别资源):
获取http://localhost:8080/person/1
{
"name":"Ron Swanson",
"age" : ...
"_links":{
"self":{
"href":"http://localhost:8080/person/1" // the resource id
}
}
}
仅供参考,如果您调整配置,则可以提供实体ID:
@Configuration
public class CustomRepositoryRestConfiguration extends RepositoryRestConfigurerAdapter {
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration configuration) {
configuration.exposeIdsFor(Parameter.class, Reference.class, Task.class);
}
}