Предполагая, что вы используете Spring Boot, Spring Data Mongo, вам следует рассмотреть возможность использования Spring Content Mongo для таких хранилищ контента:
Добавьте следующие зависимости в ваш pom.xml
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-mongo-boot-starter</artifactId>
<version>0.4.0</version>
</dependency>
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-rest-boot-starter</artifactId>
<version>0.4.0</version>
</dependency>
Убедитесь, что в вашем приложении присутствует bean-компонент GridFsTemplate. Примерно так:
@Configuration
public class MongoConfig
@Bean
public GridFsTemplate gridFsTemplate() throws Exception {
return new GridFsTemplate(mongoDbFactory(), mappingMongoConverter());
}
...
Чтобы разрешить ассоциировать контент с вашей сущностью, присвойте ему следующие атрибуты:
public class Event {
... other attributes ...
List<Image> images;
List<Recepit> receipts;
}
public class Image {
@ContentId
private String contentId;
@ContentLength
private long contentLength = 0L;
@MimeType
private String mimeType = "image/jpeg";
}
public class Receipt {
@ContentId
private String contentId;
@ContentLength
private long contentLength = 0L;
@MimeType
private String mimeType = "image/jpeg";
}
Добавить интерфейс магазина:
@StoreRestResource
public interface EventImage extends ContentStore<Image, String> {
}
@StoreRestResource
public interface EventReceipt extends ContentStore<Receipt, String> {
}
Это все, что тебе нужно. При запуске приложения Spring Content увидит зависимости от модулей Mongo / REST и внедрит реализацию ImageStore
и ReceiptStore
для GridF, а также реализацию контроллера, поддерживающего полную функциональность CRUD, и отобразит эти операции. вниз на основные интерфейсы магазина. У вас будут конечные точки REST, доступные под /events/{eventId}/images
и /events/{eventId}/receipts
.
Итак
curl -X PUT /events/{eventId}/images -F 'file=@path/to/local/image'
загрузит новое изображение и добавит его в список List<Image>
curl -X GET /events/{eventId}/images/
выдаст вам список изображений
curl -X GET /events/{eventId}/images/{contentId}
получит изображение события
curl -X DELETE /events/{eventId}/images/{contentId}
удалит изображение события
Квитанции будут работать так же.
Есть несколько руководств по началу работы здесь . Они используют Spring Content для файловой системы, но модули взаимозаменяемы. Справочное руководство Mongo - здесь . И здесь есть обучающее видео здесь .
НТН