То, что вам нужно, - это работа «прямо из коробки» в Spring Data REST путем настройки URI ресурса элемента :
@Configuration
public class RestConfigurer extends RepositoryRestConfigurerAdapter {
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
config.withEntityLookup().forRepository(ModelRepo.class, model -> HashIdUtil.encode(model.getId()), ModelRepo::findByEncodedId);
super.configureRepositoryRestConfiguration(config);
}
}
public interface ModelRepo extends JpaRepository<Model, Long> {
default Model findByEncodedId(String encodedId) {
return getById(HashIdUtil.decode(encodedId));
}
Model getById(Long id);
}
public class HashIdUtil {
private static final Hashids HASHIDS = new Hashids("salt", 8);
public static String encode(Long source) {
return HASHIDS.encode(source);
}
public static Long decode(String source) {
return HASHIDS.decode(source)[0];
}
}
К сожалению, из-за ошибки (я полагаю), объекты PUT / PATCH не работают в Spring Boot 2+, в отличие от предыдущей версии SB (1.5+), где она работает должным образом.
См.моя демка: sdr-hashids-demo