使用Spring Data Rest默认链接创建

时间:2018-10-26 08:25:48

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

我有一个实体类“ Employee”,当我在路径“ ../employees”上使用Get请求时,Spring Data Rest返回所有雇员。默认情况下,它还会创建指向@OneToMany关系的链接。例如

        "_links": {
                "self": {
                    "href": "http://localhost:9000/mep/api/employees/1003"
                },
                "employee": {
                    "href": "http://localhost:9000/mep/api/employees/1003"
                },
                "assignmentProjectEmployeeSet": {
                    "href": "http://localhost:9000/mep/api/employees/1003/assignmentProjectEmployeeSet"
                }
            }

是输出的一部分。现在,我使用以下类中的规范过滤此列表。

  @Service
  public class EmployeeFilterService {
   public Resources<Employee> getFilteredEmployees(Employee toBeFilteredEmployee) {

    List<Employee> filteredEmployees = employeeRepository.findAll(

          // filter stuff

    );

    List<Resource<Employee>> filteredEmployeesResources = new ArrayList<>();
    for (Employee e : filteredEmployees) {
        Resource<Employee> resource = new Resource<>(e);                      
        filteredEmployeesResources.add(resource);
    }
    return new Resources(filteredEmployeesResources);
   }
 }

不幸的是,这不返回任何链接。我知道,我可以手动添加链接,但是Spring Data Rest可以创建丢失的链接。如何使用此默认行为?

我读了一些有关PageResources的内容,但是我不确定这是否是解决方案。

感谢您的帮助 马蒂亚斯

2 个答案:

答案 0 :(得分:0)

有帮助的片段-检测策略:

Detection strategy

因此,按照DEFAULT策略,您可以尝试使用自定义过滤器方法添加存储库类/接口,该方法也将包含在链接中。

答案 1 :(得分:0)

一所大学能够帮助我。我正在寻找以下代码:

public Resources<PersistentEntityResource> filterEmployee(@RequestParam Map<String, String> requestParam, PersistentEntityResourceAssembler assembler) {
    List<Employee> filteredList = employeeFilterService.getFilteredEmployees(requestParam);

    List<PersistentEntityResource> resourceList = new ArrayList<>();
    for (Employee e : filteredList) {
        resourceList.add(assembler.toResource(e));
    }
    return new Resources<>(resourceList);
}

PersistentEntityResourceAssembler是键,该类需要注释

@RepositoryRestController

以此创建所需的链接。

Matthias