【发布时间】:2017-04-19 11:13:07
【问题描述】:
我们正在为我们的服务构建一个 API,我们希望尽可能地利用 Spring Data Rest。
这个 API 和下面的新模型将替代我们仍然需要支持的旧 API(它是旧模型)。 我们的想法是构建一个“适配器”网络应用程序,复制旧 api 的结构并使用一些内部转换为旧模型提供服务。
旧的 api 也使用 Spring Data Rest,所以这里的想法是: 构建一个存储库实现,而不是查询数据库,而是查询我们全新的 API、检索新模型、应用一些转换并返回旧模型。
不幸的是,即使我使用 @Repository 注释来注释存储库实现,Spring 也不会在 API 中公开存储库。
我不确定这是否真的可以做到,或者只是我没有实现一些核心功能。 我想避免的是在控制器中手动重新实现所有弹簧数据休息方法。
这是我的存储库类
// Method are not implemented, this is just the backbone
@Repository
public class SampleRespositoryImpl implements ReadOnlyRepository<OldSample, String> {
NewApiClient client;
public SampleRespositoryImpl(NewApiClient client) {
this.client = client;
}
@Override
public OldSample findOne(String accession) {
NewSample newSample = client.fetch(accession)
OldSample oldSample = //apply transformation to newSample
return oldSample;
}
@Override
public boolean exists(String accession) {
return client.fetch(accession) != null;
}
@Override
public Iterable<OldSample> findAll() {
return new ArrayList<>();
}
@Override
public Iterable<OldSample> findAll(Iterable<String> var1) {
return new ArrayList<>();
}
@Override
public long count() {
return 0;
}
@Override
public Iterable<OldSample> findAll(Sort var1) {
return new ArrayList<>();
}
@Override
public Page<OldSample> findAll(Pageable var1) {
List<OldSample> OldSampleList = new ArrayList<>();
Page<OldSample> page = new PageImpl<>(OldSampleList);
return page;
}
}
这是我在访问 api 根目录时想要返回的内容 (http://localhost:8080/)
{
"_links": {
"samples": {
"href": "http://localhost:8080/samples{?page,size,sort}
}
}
}
【问题讨论】:
标签: spring rest spring-mvc spring-data