用于嵌入资源分页的用例

时间:2014-12-18 05:02:07

标签: spring-data spring-data-rest

有一个用例我正在努力使用SDR,如下所示 -

这是用户表和RefSecQuestion表

User -> ManyTOOne -> RefSecQuestion , RefSecQuestion -> OneToMany -> User

这是User Table和UserFriends表

User -> OneToMany UserFriends , UserFriends -> ManyToOne -> User

当我去/ users / {id} / userFriends时,要求 然后默认显示来自UserProjection的firstname,lastname等

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

但是,既然RefSecQuestion也与User有关,那么当我走的时候会发生什么 / refSecQuestions - >此页面挂起,因为它试图用UserProjection替换用户链接。对于大多数用户而言,RefSecQuestion表存在一个问题,因此会因分页丢失而导致页面中断。

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

/users/{id}/userFriends
/refSecQuestions/users  

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

1 个答案:

答案 0 :(得分:5)

最后,我能够获得所需的结果,并在此发布给所有SDR用户。 我希望在此网址中加入分页 - 其中User - >一对多 - > UserLanguages

/users/{id}/userLanguages

现在使用默认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;
    }

然后,在UserLangRepository

public interface UserLanguageRepository extends BaseRepository<UserLanguage, Integer> {

    Page<UserLanguage> findByUserId(@Param("userId") Integer userId, Pageable pageable);
}

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

http://localhost:8585/MYAPP/users/3/userLanguages

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