Spring REST存储库显示错误的URL

时间:2017-05-04 13:05:52

标签: spring rest spring-boot spring-rest

我使用Spring Boot开发了示例应用程序。我有一个抽象类(Employee)和两个具体的子类,例如全职和兼职员工。

我更喜欢加入类型的继承和3个由JPA提供程序创建的表。

我还为Employee创建了REST存储库。如下所示:

package com.caysever.repository;

import com.caysever.model.Employee;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;

/**
 * Created by alican on 04.05.2017.
 */
@RepositoryRestResource(path = "employee")
public interface EmployeeRepository extends JpaRepository<Employee, Long>{
}

当我在浏览器中调用**/employee**网址时,我的内容如下:

{
    "fullTimeEmployees" : [ {
      "name" : "Alican",
      "surname" : "Akkuş",
      "birthDay" : "2017-05-04T12:37:20.189+0000",
      "gender" : "MALE",
      "totalWorkingHoursOfWeek" : 40,
      "_links" : {
        "self" : {
          "href" : "http://localhost:8080/fullTimeEmployee/1"
        },
        "fullTimeEmployee" : {
          "href" : "http://localhost:8080/fullTimeEmployee/1"
        }
      }
    } 

当我为第一位员工 localhost:8080/fullTimeEmployee/1 调用此网址时,我收到了404状态代码,但未找到。但我会通过此网址 localhost:8080/employee/1 获得第一名员工。

您可以在GitHub上看到所有代码 - &gt; https://github.com/AlicanAkkus/jpa-inheritance-strategy

为什么Spring REST会生成 fullTimeEmployee 网址?

2 个答案:

答案 0 :(得分:0)

我认为使用@RepositoryRestResource修改导出详细信息,例如使用/ empoyee而不是默认值/ fullTimeEmployee

尝试

@RepositoryRestResource(collectionResourceRel = "fullTimeEmployees", path = "fullTimeEmployees")

或者如果您想使用/ employee

@RepositoryRestResource(collectionResourceRel = "employee", path = "employee")

路径设置要在其下导出此资源的段,collectionResourceRel设置在生成集合资源的链接时使用的值。

希望这有帮助

答案 1 :(得分:0)

一种解决方法是为具体类添加存储库接口,共享超类存储库的路径

@RepositoryRestResource(collectionResourceRel = "employee", path = "employee")
public interface FullTimeEmployeeRepository extends JpaRepository<FullTimeEmployee, Long> {
}

@RepositoryRestResource(collectionResourceRel = "employee", path = "employee")
public interface PartTimeEmployeeRepository extends JpaRepository<PartTimeEmployee, Long> {
}

这将生成带有“员工”路径的链接,而不管子类的类型如何。

"_links" : {
        "self" : {
          "href" : "http://localhost:8080/employee/1"
        },
        "fullTimeEmployee" : {
          "href" : "http://localhost:8080/employee/1"
        }
      }

我不知道是否有其他方法可以解决此问题。