Как мне заставить Spring's Data Rest Repository извлекать данные по имени, а не по идентификатору

Я использую Spring Data Rest Repositories из spring-boot-starter-data-rest, при этом Couchbase используется в качестве подчеркивающей СУБД.

Мой Pojo для объекта настроен так.

@Document
public class Item{

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

@NotNull
private String name;

//other items and getters and setters here
}

И скажем, что элемент имеет идентификатор «xxx-xxx-xxx-xxx» и имя «testItem». Проблема в том, что когда я хочу получить доступ к элементу, мне нужно быть доступным для /items/testItem, но вместо этого он доступен для /items/xxx-xxx-xxx-xxx.

Как мне использовать его имя вместо сгенерированного идентификатора для получения данных.

0
0
96
2

Ответы 2

Если вы хотите запросить элемент по имени и хотите, чтобы он выполнялся как запрос по идентификатору, вы должны убедиться, что имя также уникально. Вы не можете идентифицировать явный объект по имени, если все объекты имеют одинаковое имя, верно?

С jpa это можно сделать так:

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

Это правда, но это не ответ на вопрос. Также я использую базу данных Couchbase, JPA здесь не используется.

needoriginalname 23.11.2018 04:44

Я нашла ответ на свой вопрос.

Мне просто нужно переопределить конфигурацию для 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

Другие вопросы по теме