Если вы используете Spring Data, тогда Spring Content JPA намного проще, чем напрямую использовать @Lob и писать собственный @Controller для обработки POST-данных multipart / form-data.
Добавьте следующие зависимости:
pom.xml
<!-- Java API -->
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-jpa-boot-starter</artifactId>
<version>0.0.11</version>
</dependency>
<!-- REST API -->
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-rest-boot-starter</artifactId>
<version>0.0.11</version>
</dependency>
Добавьте следующие атрибуты в вашу сущность UserOauth, чтобы контент мог быть связан сit.
UserOAuth.java
@Entity
public class UserOAuth {
...existing fields...
@ContentId
private String contentId;
@ContentLength
private long contentLength = 0L;
// if you have rest endpoints
@MimeType
private String mimeType;
// no need for Blob
Создать ContentStore
(эквивалент JpaRepository для больших двоичных объектов):
UsersOAuthContentStore.java
@StoreRestResource(path="usersPhoto")
public interface UsersPhotoContentStore extends ContentStore<UserOAuth, String> {
}
(я предполагаю, что у вас есть необходимые компоненты для подключения к базе данных).
При запуске приложения Spring Content увидит интерфейс UsersPhotoContentStore
и зависимость spring-content-jpa
и внедрить реализацию этого интерфейса в JPA для вас.Он также увидит зависимость spring-content-rest
и добавит реализацию @Controller, которая перенаправляет запросы GET, PUT, POST и DELETE REST на UsersPhotoContentStore
.Это избавляет вас от необходимости писать либо.Конечные точки REST будут доступны в /usersPhotos
, поэтому ...
curl -X POST -F "image=@/home/user1/Desktop/photo.jpg" /usersPhotos/{userOAuthId}
загрузит photo.jpg и свяжет его с вашей сущностью.И:
curl /usersPhotos/{userOAuthId}
получит его снова.
HTH