如何让Spring的Data Rest Repository按名称而不是id来检索数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何让Spring的Data Rest Repository按名称而不是id来检索数据相关的知识,希望对你有一定的参考价值。

我使用spring-boot-starter-data-rest中的Spring Data的Rest Repositories,Couchbase用作下划线DBMS。

我对象的Pojo设置如此。

@Document
public class Item{

@Id @GeneratedValue(strategy = UNIQUE)
private String id;

@NotNull
private String name;

//other items and getters and setters here
}

并且说项目的ID为“xxx-xxx-xxx-xxx”,名称为“testItem”。问题是,当我想访问该项目时,我需要被/items/testItem访问,但它可以被/items/xxx-xxx-xxx-xxx访问。

如何使用其名称而不是其生成的ID来获取数据。

答案

我找到了自己问题的答案。

我只需要覆盖EntityLookup的配置。

@Component
public class SpringDataRestCustomization extends RepositoryRestConfigurerAdapter {

    @Override
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {

    config.withEntityLookup().forRepository(UserRepository.class).
    withIdMapping(User::getUsername).
    withLookup(UserRepository::findByUsername);
    }
}

在这里找到了信息,虽然方法名称略有改变。 https://github.com/spring-projects/spring-data-examples/tree/master/rest/uri-customization

另一答案

如果您希望按名称查询项目并希望它按ID进行查询,则应确保名称也是唯一的。如果所有对象具有相同的名称,则无法按名称标识显式对象,对吧?

有了jpa,你可以这样做:

@NotNull
@Column(name="name",nullable=false,unique=true)
private String name;

以上是关于如何让Spring的Data Rest Repository按名称而不是id来检索数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring-Data-Rest 中实现细粒度的访问控制?

您如何保护 Spring Boot / Spring-Data Rest 以便用户只能访问他自己的实体

如何将 spring-data-rest 与 spring websocket 混合到一个实现中

如何禁用 Spring Data REST 存储库的默认公开?

如何配置 Spring-Data-Rest 以仅返回登录用户拥有的数据

如何测试 Spring Data Rest @RepositoryRestResource?