问题:任何HAL客户端或使用admin-on-rest访问HAL API的示例?
我开始因为在介绍的第一段中提到了HAL,但现在我无法找到任何使用HAL休息客户端的示例或任何其他人,所以我现在正在清理,只是写了一堆简单的findAll存储库位于已经强大的现有HAL API之上。
答案 0 :(得分:2)
在这里添加一个更简洁的答案,我的思维过程并没有受到污染,因为我已经弄明白了(对于任何人未来的参考)...再次假设HAL API是用Spring Data Rest制作的。
此集成的四个主要关键是:
RepositoryRestConfiguration.exposeIdsFor( MyEntity.class )
@RepositoryRestResource
PagingAndSortingRepository<MyEntity, Integer>, QueryDslPredicateExecutor<MyEntity>
并让他们扩展/api/myEntitys?field1=foo&field2=bar
以按属性名称(例如params.data
)展示极其有用的搜索过滤器。 QuerydslBinderCustomizer<QMyEntity>
以包含链接的资源(例如&#39; http://myserver.com/api/myEntitys/19&#39;)(或者到位) ,HAL没有用它)你在1中暴露的外键(例如myEntityId = 19)其他小项目:
在更新时使用PATCH而不是PUT(如果你更像是一个休眠专家,你可以使用PUT,并且可以比我更好地映射你的实体但是我很难完美地映射它和HAL的补丁将采取部分实体)
提交GET_LIST和GET_MANY_REFERENCE时,您会从&#39;页面获得项目总数和分页参数。响应部分,您使用&#39; size&#39;和&#39;页&#39;查询API请求中的参数。 (所以,不需要标题和东西)
更改默认&#39;等于&#39;过滤任何字符串条目(从上面的3.)到&#39;包含&#39;过滤器,您还必须扩展default void customize( QuerydslBindings bindings, QChampion champion )
{
bindings.bind( String.class ).first( ( StringPath path, String value ) -> path.contains( value ) );
}
并在每个存储库中提供自己的自定义方法。例如:
{{1}}
答案 1 :(得分:1)
我们没有具体的HAL示例。然而,这一介绍的重点是,管理员休息是后端不可知的。
您可以按照documentation创建自己的自定义休息客户端。阅读现有代码以获取灵感。
答案 2 :(得分:1)
对于将来引用此内容的任何人,如果您碰巧通过Spring Data Rest控制您的API,您可以考虑在每个现有存储库中使用excerptProjection,这些存储库显示实体的内联版本。如果除了管理员访问您的API之外绝对没有任何内容,这将有效。
对于我的情况,我计划为每个具有实体的休息资源编写一个自定义投影,并将其命名为相同的东西:&#34; inline&#34;。然后在admin-on-rest restClient中,只需要在每个GET_MANY或GET_MANY_REFERENCE请求上请求内联投影。
这是我目前最好的。它并不完美,但对于我拥有的实体数量,它比从头开始构建CRUD界面还要快几周,所以我强烈推荐管理员休息。