用于嵌入资源分页的用例

for*_*rtm 3 spring-data spring-data-rest

有一个用例我正在努力与SDR如下 -

这是User Table和RefSecQuestion表

User -> ManyTOOne -> RefSecQuestion , RefSecQuestion -> OneToMany -> User
Run Code Online (Sandbox Code Playgroud)

这是User Table和UserFriends表

User -> OneToMany UserFriends , UserFriends -> ManyToOne -> User
Run Code Online (Sandbox Code Playgroud)

有一个要求,当我去/用户/ {ID}/userFriends,然后名字,姓氏等从UserProjection应该是默认的显示

因此,我在UserRepository中启用了excerptProjection,它运行正常.我希望这里有大约100个结果,如果这个结果没有分页,那就没问题.

但是,现在因为RefSecQuestion也与User有关,所以当我去/ refSecQuestions时 - >此页面挂起,因为它试图用UserProjection替换用户链接.对于大多数用户而言,RefSecQuestion表存在一个问题,因此由于分页丢失而导致页面中断.

因为我不能在这里选择单向性,因为两个网址都需要,即

/users/{id}/userFriends
/refSecQuestions/users  
Run Code Online (Sandbox Code Playgroud)

我发现最接近的答案是选择单向性,即我在RefSEcQuestion中为用户设置Rest Export为false

for*_*rtm 5

最后,我能够得到我想要的结果,并在这里发布给所有SDR用户.我希望在此URL中加入分页 - 用户 - >一对多 - > UserLanguages

/users/{id}/userLanguages
Run Code Online (Sandbox Code Playgroud)

现在使用默认的SDR配置,嵌入式资源不会被分页,因此我必须手动公开它们,并且下面的解决方法仍然需要非常少的代码行 -

@RestController
public class MainController {

    @RequestMapping(value = "/users/{id}/userLanguages", method = RequestMethod.GET)
    @PreAuthorize("permitAll")
    public ModelAndView findUserLanguages(@PathVariable Integer id) {
        ModelAndView model = new ModelAndView("forward:/userLanguages/search/findByUserId?userId=" + id);
        return model;
    }
Run Code Online (Sandbox Code Playgroud)

然后,在UserLangRepository中

public interface UserLanguageRepository extends BaseRepository<UserLanguage, Integer> {

    Page<UserLanguage> findByUserId(@Param("userId") Integer userId, Pageable pageable);
}
Run Code Online (Sandbox Code Playgroud)

这里名称findByUserId遵循Spring Data Query Derivation规则,其中UserLanguage中有用户列,User中有id列.然后对以下URL进行分页并具有其他选项以及排序,大小等.

http://localhost:8585/MYAPP/users/3/userLanguages
Run Code Online (Sandbox Code Playgroud)

但是有一个问题,next和prev链接指向转发链接..