Почему бы не использовать Spring Content JPA ? Это может обеспечить службу хранения и конечные точки REST для управления контентом и, если вы хотите, связать этот контент с объектами JPA.
pom.xml
<!-- Java API -->
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-jpa</artifactId>
<version>0.4.0</version>
</dependency>
<!-- REST API -->
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-rest</artifactId>
<version>0.4.0</version>
</dependency>
Конфигурация
@Configuration
@EnableJpaStores
@Import(RestConfiguration.class) // enable Spring Content Rest
public class MysqlConfig {
// Initialize the database schema
//
@Value("/org/springframework/content/jpa/schema-drop-mysql.sql")
private Resource dropReopsitoryTables;
@Value("/org/springframework/content/jpa/schema-mysql.sql")
private Resource dataReopsitorySchema;
@Bean
DataSourceInitializer datasourceInitializer() {
ResourceDatabasePopulator databasePopulator =
new ResourceDatabasePopulator();
databasePopulator.addScript(dropReopsitoryTables);
databasePopulator.addScript(dataReopsitorySchema);
databasePopulator.setIgnoreFailedDrops(true);
DataSourceInitializer initializer = new DataSourceInitializer();
initializer.setDataSource(dataSource());
initializer.setDatabasePopulator(databasePopulator);
return initializer;
}
}
Создать "магазин":
ImagesStore.java
@StoreRestResource(path="images")
public interface ImagesStore extends Store<String> {
}
Это все, что вам нужно для создания конечных точек REST @ /images
. Когда ваше приложение запускается, Spring Content проверяет ваши зависимости (см. Spring Content JPA & REST), просматривает ваш интерфейс ImagesStore
и внедряет реализацию этого интерфейса для JPA. Он также внедрит @Controller
, который перенаправляет http-запросы в эту реализацию. Это избавляет вас от необходимости реализовывать все это самостоятельно, что, я думаю, то, что вы ищете.
Итак ...
curl -X POST /images/pokemon.jpg
-F "image = @ / home / Desktop / pokemon.jpg"
сохранит изображение в базе данных (как BLOB).
curl /images/pokemon.jpg
получит его снова и так далее ... поддерживает полный CRUD.
Есть пара руководств по началу работы здесь . Справочное руководство здесь . И здесь есть обучающее видео здесь . Кодовый бит начинается примерно на полпути.
НТН