PersonResource和Spring-hateoas中的Person一样

时间:2017-09-20 17:05:12

标签: java spring rest spring-data spring-hateoas

我有一个包含id,firstName,lastName:

Person.java

根据文档,如果我希望有hateoas链接,分页和计数,我应该使用PersonResource

https://docs.spring.io/spring-hateoas/docs/current/reference/html/#fundamentals.resources

Person是一回事吗? 我应该如何处理我的ID,ResourceSupport已经实施了getId()方法。

1 个答案:

答案 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);
    }

}