Я использую 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.
Как мне использовать его имя вместо сгенерированного идентификатора для получения данных.
Если вы хотите запросить элемент по имени и хотите, чтобы он выполнялся как запрос по идентификатору, вы должны убедиться, что имя также уникально. Вы не можете идентифицировать явный объект по имени, если все объекты имеют одинаковое имя, верно?
С jpa это можно сделать так:
@NotNull
@Column(name = "name",nullable=false,unique=true)
private String name;
Я нашла ответ на свой вопрос.
Мне просто нужно переопределить конфигурацию для 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
Это правда, но это не ответ на вопрос. Также я использую базу данных Couchbase, JPA здесь не используется.