【问题标题】:Use Spring Data Rest default link creation使用 Spring Data Rest 默认链接创建
【发布时间】:2018-10-26 08:25:47
【问题描述】:

我有一个实体类“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 的文章,但我不确定这是否是解决方案。

感谢您的帮助 马蒂亚斯

【问题讨论】:

  • 您已经创建了自定义控制器/服务,因此您必须组装资源。您可以查看使用内置的 QueryDSL 支持让 Spring Data Rest 处理过滤(即没有自定义控制器或服务),您将通过附加查询参数获得所需的响应,例如/employees?surname=smith

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


【解决方案1】:

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

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

这样就创建了所需的链接。

马蒂亚斯

【讨论】:

    【解决方案2】:

    一个有帮助的sn-p - 检测策略:

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

    【讨论】:

    • 您好 Karthik,我不确定我是否理解正确,但我的问题是没有为我的一种方法添加新链接。我得到一个员工列表,我希望 Spring Data Rest 添加在我调用默认 URL 时将创建的所有链接 .../employees
    猜你喜欢
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    • 2014-11-03
    相关资源
    最近更新 更多