1

我無法使用spring-data jpa使用spring-data rest獲取正確的url以顯示自我href。Spring data-rest錯誤資源href

所以我有一個學生類:

@Entity 
@Table(name="student", schema="main") 
public class Student { 

    @Id 
    private Long id; 

    ... 
    ... 

    @OneToOne 
    @JoinColumn(name = "id") 
    private StudentInformation studentInformation; 
} 

與相應的庫文件

@RepositoryRestResource(collectionResourceRel = "students", path = "students") 
public interface StudentRepository extends PagingAndSortingRepository<Student, Long> { 

} 

還有一個StudentInformation類

@Entity 
@Table(name="studentinformation", schema="main") 
public class StudentInformation { 

    @Id 
    private Long id; 

    ... 
    ... 
} 

(其他屬性/ getter/setter方法省略)

與對應的庫

@RepositoryRestResource(collectionResourceRel = "studentinformation", path = "students/studentinformation") 
public interface StudentInformationRepository extends CrudRepository<StudentInformation, Long> { 
} 

學生顯示,當我搜索一個通過id我所期望的,

{ 
    "id": 1, 
    ... 
    ... 
    "_links": { 
    "self": { 
     "href": "http://localhost:8080/students/1" 
    }, 
    "student": { 
     "href": "http://localhost:8080/students/1" 
    }, 
    "studentinformation": { 
     "href": "http://localhost:8080/students/1/studentinformation" 
    } 
    } 
} 

除非我跟着從學生到studentInformation鏈接,studentInformation有自我鏈接不正確。

{ 
    "id": 1, 
    ... 
    ... 
    "_links": { 
    "self": { 
     "href": "http://localhost:8080/students/studentinformation/1" 
    }, 
    "studentinformation": { 
     "href": "http://localhost:8080/students/studentinformation/1" 
    } 
    } 
} 

如何獲取鏈接來閱讀 的 「href」: 「的http://localhost:8080/students/1/studentinformation 代替 的 」href「:」 http://localhost:8080/students/studentinformation/1

感謝

回答

1

首先,多段路徑像students/studentinformation可能不起作用,因爲它不被支持,請參閱this answer,所以不要着重於設計你的URL。如果你真的需要有http://localhost:8080/students/1/studentinformation表示 - 你需要爲它定義一個自定義控制器,不要依賴Spring Data REST

其次,使用projections/students端點上有不同的學生數據會更好嗎?如果這只是Student資源的不同表示形式,那麼我會使用預測,例如students/1?projection=minimalstudents/1?projection=full

如果studentinformation含有比students完全不同的數據,它不是Student資源的表示,只是定義端點爲/studentinformation

+0

感謝您的回覆。所以你說沒有辦法將自己的href網址中的資源堆疊起來? like, 'http:// localhost:8080/RESOURCE/{id}/SUB_RESOURCE' using @RepositoryRestResource?我將不得不定義我自己的定製REST控制器?這似乎很奇怪 – user2254140

+0

不幸的是,你可以在我提供的鏈接中檢查,至少在存儲庫中沒有。如果你會找到辦法做到這一點 - 很高興知道。可以完成的方式是通過定義@RepositoryRestController和您的自定義實現並將其與您的資源相關聯。 –

+0

如果您想使用存儲庫實現,您可以執行'SUB_RESOURCE/{ID}?RESOURCE_ID = {RESOURCE_ID}' –