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
最后,我能够得到我想要的结果,并在这里发布给所有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链接指向转发链接..
归档时间: |
|
查看次数: |
955 次 |
最近记录: |