Как я могу получить репозиторий данных в Spring для получения данных по их имени вместо идентификатора - PullRequest
0 голосов
/ 23 ноября 2018

Я использую репозитории отдыха данных Spring из 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
}

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

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

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

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

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

0 голосов
/ 23 ноября 2018

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

С помощью jpa вы можете сделать это следующим образом:

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