首先,这与Spring Data Rest: How to search by another object's key?相关,似乎已在https://jira.spring.io/browse/DATAREST-502中解决了
我的问题是(我相信)并延伸到此。我看到以下行为:
我定义了两个存储库查询,例如
Person findByAccount(@Param("account") Account account));
Collection<Person> findByAccountIn(@Param("accounts") Collection<Account> accounts));
http://localhost:8080/people/search/findByAccount?account=http://localhost:8080/accounts/1
我可以使用http://localhost:8080/people/search/findByAccountIn?accounts=http://localhost:8080/accounts/1
之类的网址访问第二种方法,但如果我尝试传入多个帐户,例如
http://localhost:8080/people/search/findByAccountIn?accounts=http://localhost:8080/accounts/1,http://localhost:8080/accounts/2,
除了IGNORE第一个帐户(http://localhost:8080/accounts/1
)以及仅根据第二个帐户(http://localhost:8080/accounts/2
)
通过REST API将实体集合传递给存储库参数的正确方法是什么?我发现它适用于单个实体,但不适用于Collection。请注意,直接访问JpaRepository时,这两个存储库方法都按预期工作。
另请注意,如果集合具有某种基本类型,则这些查询似乎有效,例如findByAccountIdIn(@Param("accountIds") Collection<Long> accountIds)
可通过http://localhost:8080/people/search/findByAccountIdIn?accountIds=1,2
通过预期功能访问。这让我相信,将URI列表传递给需要相应实体集合的查询方法的方式可能是一个错误。
提前感谢您的帮助!
答案 0 :(得分:1)
尝试重复查询参数,因为大多数服务器会将其解释为列表。它可能不是最漂亮的解决方案,但应该有效。
http://localhost:8080/people/search/findByAccountIn?accounts=http://localhost:8080/accounts/1&accounts=http://localhost:8080/accounts/2
答案 1 :(得分:0)
我知道这已经永远古老了,但是我找到了答案。
我将把它放在这里,供其他应该这样徘徊的人使用:
How to use List in endpoint exported by Spring Data REST?
List<Person> findByAccountIn(@Param("accounts") Account... accounts);
请求看起来像这样:
http://localhost:8080/people/search/findByAccountIn?accounts=http://localhost:8080/accounts/1&accounts=http://localhost:8080/accounts/2&accounts=http://localhost/accounts/anotheraccountid