分页嵌入式资源的用例

堡垒

我正在努力解决以下SDR的用例-

这是用户表和RefSecQuestion表

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

这是用户表和用户朋友表

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

有一个要求,当我进入/ users / {id} / userFriends时,默认情况下应显示UserProjection中的firstname,lastname等

结果,我在UserRepository中启用了excerptProjection,并且工作正常。我希望这里有大约100个结果,所以如果不分页,就可以了。

但是,由于RefSecQuestion也与User有关,所以发生的事情是,当我转到/ refSecQuestions->此页面挂起,因为它试图用UserProjection替换用户链接。RefSecQuestion表的大多数用户偏向一个问题,因此由于分页丢失而导致页面中断。

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

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

我找到的最接近的答案是选择单方向性,这是我在RefSEcQuestion中为用户将Rest Export设置为false的原因。

堡垒

最终,我能够得到想要的结果,并在此为所有SDR用户发布。我想在此URL中进行分页-用户->一对多-> 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列,而User中有id列。然后分页以下URL,并具有其他选项,例如排序,大小等。

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

但是存在一个问题,下一个和上一个链接指向转发的链接。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章