2017-04-19 65 views
0

我们正在建设我们的服务的API,我们想利用春节休息的数据尽可能地。春天仓库,但不会数据库,但外部API

此API和新的模式下将取​​代旧式API(和它的老型号),我们仍然需要支持。 我们的想法是建立一个“适配器”的网络应用程序,复制旧的API的结构和使用一些内部转换服务旧模式。

而且旧的API的使用Spring数据休息,所以这里的想法: 建立一个资料库的实现,而不是查询数据库将查询我们的品牌新的API,检索新的模型,应用一些变换,并返回旧模型。

不幸的是,即使我注释库实现与@Repository注释,春不暴露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根(​​)

{ 
    "_links": { 
     "samples": { 
      "href": "http://localhost:8080/samples{?page,size,sort} 
     } 
    } 
} 
+1

[春季实施数据仓库的自定义方法,并通过REST暴露他们]的可能的复制(http://stackoverflow.com/questions/25201306/implementing-custom - 方法-的 - 弹簧 - 数据储存库和 - 曝光 - 它们通) –

回答

相关问题