Spring-data-rest可以通过GET
,PUT
和DELETE
等操作的主键公开实体。
/myentityies/123
它还会公开搜索操作。
/myentities/search/byMyOtherKey?myOtherKey=123
在我的情况下,实体有许多备用键。呼叫我们的系统将通过这些ID而不是我们的内部主键来了解对象。是否可以通过其他网址公开对象,并由内置GET
控制器处理PUT
,DELETE
和spring-data-rest
?
/myentities/myotherkey/456
我们希望避免强制呼叫系统必须为每次更新发出两个请求。
我尝试使用@RestResource
路径值,但似乎没有办法添加其他路径。
答案 0 :(得分:0)
我终于想出了如何做到这一点!
在Spring上下文中添加BackendIdConverter的实现。
@Component
public class BackendIdConverterImpl implements BackendIdConverter {
@Override
public boolean supports(Class<?> delimiter) {
return true; // Always convert.
}
@Override
public Serializable fromRequestId(String id, Class<?> entityType) {
// Convert from the external key to your internal key.
}
@Override
public String toRequestId(Serializable id, Class<?> entityType) {
// Convert from the internal key to your external key.
}
}
答案 1 :(得分:-1)
您认为在URI中,Spring Data Rest旨在考虑关系。
使用映射在
上的@RepositoryRestController
声明另一个控制器没有问题
/myentities/myotherkey/{otherKey}
但是,客户端应用程序将如何发现它?为了保持一致,您必须在资源映射中添加指向此控制器的链接,并使用自定义ResourceProcessor<Resource<Myentity>>
。
但这里没有预制的东西。在REST环境中,实体的ID应该是其URI。如果你想拥有另一种范式,那么不幸的是你必须自己适应它。