【问题标题】:Spring repository without database but external api没有数据库但外部 api 的 Spring 存储库
【发布时间】: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


【解决方案1】:

其他人将我链接到 StackOverflow 中的另一个答案,here 可能是重复的。

通读该答案后,我决定按照这条路径来满足我们的需求需要付出太多努力,因此我更倾向于创建自定义控制器来公开必要的方法。

Kevin 报告了此解决方案作为对Implementing methods of Spring Data repository and exposing them through REST 的回答

【讨论】:

    猜你喜欢
    • 2016-05-01
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 2014-04-06
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    相关资源
    最近更新 更多