Почему бы вам не взглянуть на Spring Content .Это сделано для того, чтобы делать именно то, что вы пытаетесь сделать, и связывать один или несколько объектов содержимого с объектами данных Spring.
Чтобы добавить это в существующий проект Spring Boot, вы должны сделать следующее: -
pom.xml
<!-- Java API -->
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-jpa-boot-starter</artifactId>
<version>0.4.0</version>
</dependency>
<!-- REST API -->
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-rest-boot-starter</artifactId>
<version>0.4.0</version>
</dependency>
MaterialEntity.java
@Entity
public class MaterialEntity {
@Id
@GeneratedValue
private long id;
...other existing fields...
@ContentId
private String contentId;
@ContentLength
private long contentLength = 0L;
@MimeType
private String mimeType = "text/plain";
...
}
MaterialEntityContentStore.java
@StoreRestResource(path="materialEntityContents")
public interface MaterialEntityContentStore extends ContentStore<MaterialEntity, String> {
}
Это все, что вам нужно сделать, чтобы получить конечные точки REST, которые позволят вам хранить и извлекать контент, связанный с каждым MaterialEntity.Как это на самом деле работает, очень похоже на Spring Data.Когда ваше приложение запустится, Spring Content увидит зависимости spring-content-jpa-boot-starter
и будет знать, что вы хотите хранить контент в своей базе данных.Затем он создаст схему в БД для этого, а также внедрит реализацию JPA интерфейса MaterialEntityContentStore
.Он также увидит spring-content-rest-boot-starter
и введет конечные точки REST, которые взаимодействуют с интерфейсом хранилища контента.Это означает, что вам не нужно ничего делать самостоятельно.
Так, например:
curl -X POST /materialEntityContents/{materialEntityId} -F "file=@/path/to/image.jpg"
сохранит изображение в базе данных и свяжет его с материальным объектом с идентификатором materialEntityId
.
curl /materialEntityContents/{materialEntity}
будет извлекать его снова и так далее ... фактически поддерживает полную CRUD и потоковую передачу видео.
В частности, есть (не SpringBoot) пример MySQL здесь .
Вы также можете решить хранить содержимое в другом месте, например, в файловой системе или на S3, поменяв зависимость spring-content-jpa-boot-starter
для соответствующего модуля Spring Content Storage.Примеры для каждого типа хранилища: здесь .
Во внешнем виде, к сожалению, нет примеров vuejs, но у нас есть пример angularjs 1.x здесь ,Это может помочь с интерфейсом, так как они являются похожими технологиями (в моем ограниченном опыте с обоими!).