Вам стоит взглянуть на проект сообщества Spring Content . Этот проект дает вам Spring Data-подобный подход к контенту. Именно для неструктурированных данных (документов, изображений, видео и т. Д. c) Spring Data предназначен для структурированных данных.
Вы можете добавить его в свой проект примерно так: -
pom. xml
<!-- Java API -->
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-jpa-boot-starter</artifactId>
<version>1.0.0.M9</version>
</dependency>
<!-- REST API -->
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-rest-boot-starter</artifactId>
<version>1.0.0.M9</version>
</dependency>
Конфигурация
@Configuration
@EnableJpaStores
// enable REST API
@Import("org.springframework.content.rest.config.RestConfiguration.class")
public class ContentConfig {
}
Примечание: технически эта конфигурация не требуется при использовании стартеров Spring Boot, но включена для ясности
Чтобы связать контент, добавьте аннотации Spring Content на ваш счет *
@StoreRestResource
public interface EmployeeContentStore extends ContentStore<Employee, String> {
}
Это все, что вам нужно для создания конечных точек REST для обработки содержимого вашего сотрудника по URI /employees
. Когда ваше приложение запускается, Spring Content проверяет ваши зависимости (см. Spring Content JPA и REST), просматривает ваш интерфейс UserContentStore
и внедряет реализацию этого интерфейса для JPA. Он также внедрит @Controller
, который перенаправляет http-запросы к этой реализации. Это избавляет вас от необходимости реализовывать все это самостоятельно. Таким образом, по модели программирования и работе очень похож на Spring Data.
Тогда ...
curl -X POST /employees/{employeeId} -H "Content-Type: application/pdf" -F "file=@/path/to/local/file.pdf"
сохранит содержимое /path/to/local/file.pdf
в базе данных и свяжет его с сущностью сотрудника, чей идентификатор employeeId
.
curl /employees/{employeeId} -H "Accept: application/pdf"
получит его снова и так далее ... поддерживает полную CRUD.
Поскольку вы связываете контент со своим сотрудником, когда вы получаете ваш json ответы от конечных точек Spring Data, они предоставят связанные с контентом метаданные, но НЕ «ужасные данные», которые вы видите с вашим текущим подходом.
Есть пара руководств по началу работы и видео здесь . Справочное руководство - здесь .
HTH