如何获取Spring的Data Rest存储库以按其名称而不是其ID来检索数据

时间:2018-11-23 02:32:52

标签: spring spring-boot spring-data spring-rest

我正在从spring-boot-starter-data-rest使用Spring Data的Rest信息库,其中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来获取数据。

2 个答案:

答案 0 :(得分:0)

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

我只需要覆盖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

答案 1 :(得分:-1)

如果要按名称查询该项目并希望其按id查询,则还应确保名称也是唯一的。如果所有对象都具有相同的名称,则无法按名称标识显式对象,对吗?

使用jpa,您可以这样做:

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