Одним из способов решения этой проблемы является использование проекта сообщества Spring Content .Этот проект позволяет связать контент с сущностями Spring Data.Контент управляется отдельно, оставляя только «управляемые» метаданные, связанные с контентом, на объекте.Это не испортит ваши прогнозы.Подумайте, Spring Spring, но для контента (или неструктурированных данных).
Это довольно легко добавить в существующие проекты.Я не уверен, используете ли вы Spring Boot или нет.Я приведу пример загрузки без пружины:
pom.xml
<!-- Java API -->
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-jpa</artifactId>
<version>0.5.0</version>
</dependency>
<!-- REST API (if desired)-->
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-rest</artifactId>
<version>0.5.0</version>
</dependency>
Конфигурация
@Configuration
@EnableJpaStores
@Import("org.springframework.content.rest.config.RestConfiguration.class")
public class ContentConfig {
// schema management
//
@Value("/org/springframework/content/jpa/schema-drop-mysql.sql")
private Resource dropContentTables;
@Value("/org/springframework/content/jpa/schema-mysql.sql")
private Resource createContentTables;
@Bean
DataSourceInitializer datasourceInitializer() {
ResourceDatabasePopulator databasePopulator =
new ResourceDatabasePopulator();
databasePopulator.addScript(dropContentTables);
databasePopulator.addScript(createContentTables);
databasePopulator.setIgnoreFailedDrops(true);
DataSourceInitializer initializer = new DataSourceInitializer();
initializer.setDataSource(dataSource());
initializer.setDatabasePopulator(databasePopulator);
return initializer;
}
}
Чтобы связать контент, добавьте аннотации Spring Content к своей учетной записи.
Item.java
@Entity
public class Item {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private Integer price;
// replace @Lob field with
@ContentId
private String contentId;
@ContentLength
private long contentLength = 0L;
// if you have rest endpoints
@MimeType
private String mimeType = "text/plain";
}
Создайте «хранилище»:
ItemContentStore.java
@StoreRestResource(path="itemsContent)
public interface ItemContentStore extends ContentStore<Item, String> {
}
Это все, что вам нужно для создания конечных точек REST @ /itemsContent
.Когда ваше приложение запускается, Spring Content проверит ваши зависимости (см. Spring Content JPA / REST), взглянет на ваш ItemContentStore
интерфейс и внедрит реализацию этого интерфейса для JPA.Он также внедрит @Controller
, который перенаправляет http-запросы к этой реализации.Это избавляет вас от необходимости реализовывать все это самостоятельно, что, я думаю, то, что вы ищете.
Итак ...
Чтобы получить доступ к контенту через API Java, автоматически подключите ItemContentStore
и используйте его методы.
Или для доступа к контенту через REST API:
curl -X POST /itemsContent/{itemId}
с запросом multipart / form-data сохранит изображение в базе данных и свяжет его сучетная запись, чей идентификатор itemId
.
curl /itemsContent/{itemId}
будет извлекать ее снова и так далее ... поддерживает полный CRUD.
Есть несколько вариантов полученияРуководства здесь .Справочное руководство здесь .И здесь есть обучающее видео здесь .Кодовый бит начинается примерно на полпути.
HTH