如何通过具有弹簧数据休息的备用键公开实体

时间:2014-08-20 22:07:56

标签: java spring rest spring-data-jpa spring-data-rest

Spring-data-rest可以通过GETPUTDELETE等操作的主键公开实体。

/myentityies/123

它还会公开搜索操作。

/myentities/search/byMyOtherKey?myOtherKey=123

在我的情况下,实体有许多备用键。呼叫我们的系统将通过这些ID而不是我们的内部主键来了解对象。是否可以通过其他网址公开对象,并由内置GET控制器处理PUTDELETEspring-data-rest

/myentities/myotherkey/456

我们希望避免强制呼叫系统必须为每次更新发出两个请求。

我尝试使用@RestResource路径值,但似乎没有办法添加其他路径。

2 个答案:

答案 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。如果你想拥有另一种范式,那么不幸的是你必须自己适应它。