Spring Data Rest Jpa вставляет поле @Lob

У меня есть служба отдыха данных spring, которая предоставляет такой ресурс, как:

@Entity
public class Resource{
    private String name;
    @Lob
    private byte[] data;

    private String contentType;
}

Каким должен быть json для вставки ресурса такого типа?


person rascio    schedule 10.03.2014    source источник
comment
Попробуйте выполнить сериализацию в Json в своем модульном тесте, чтобы увидеть, как это выглядит, и сможете ли вы заставить его работать.   -  person Mukus    schedule 11.03.2014
comment
ммм, кажется, строка base64 ... я попробую .. спасибо   -  person rascio    schedule 11.03.2014


Ответы (3)


Насколько я знаю, SDR еще не обрабатывает составные запросы или ответы, так как может выполнять только JSON.

Вы можете запускать SDR одновременно с обычным сервлетом Spring MVC (это одна строка кода в вашей конфигурации).

Я бы предложил использовать обычный контроллер Spring MVC для загрузки/выгрузки файлов и SDR для остальных (каламбур).

person Neil McGuigan    schedule 11.03.2014
comment
Где я могу узнать больше о сервлете Spring MVC, о котором вы говорите? - person rascio; 12.03.2014
comment
@rascio, вы должны настроить обычный сервлет Spring MVC (см. mkyong.com), а затем добавить ‹bean class=org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration/› в конфигурацию spring-mvc-servlet.xml. - person Neil McGuigan; 12.03.2014
comment
Ах... я думал, это что-то другое, ахах - person rascio; 13.03.2014

Вам не нужен JSON. «name» и «contentType» являются частью заголовка http (соответственно «Content-Type» и «Content-Disposition: имя файла») «data» — это тело HTTP. Его кодировка зависит от «Content-Encoding». Возможно, вам следует использовать «ResourceResolvers», подключенные к JPA.

person Romain DEQUIDT    schedule 19.08.2015

Spring Content был разработан именно для этого.

Предполагая, что вы используете Spring Boot, вы можете добавить обработку LOB следующим образом:

пом.xml

<dependency>
    <groupId>com.github.paulcwarren</groupId>
    <artifactId>spring-content-jpa-boot-starter</artifactId>
    <version>0.0.11</version>
</dependency>
<dependency>
    <groupId>com.github.paulcwarren</groupId>
    <artifactId>spring-content-rest-boot-starter</artifactId>
    <version>0.0.11</version>
</dependency>

Добавить магазин:

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @StoreRestResource(path="resourceContent")
    public interface ResourceContentStore extends ContentStore<Resource,String> {}
}

Свяжите контент с вашей сущностью:

@Entity
public class Resource {

  private String name;

  @ContentId
  private String contentId;

  @ContentLength 
  private long contentLength = 0L;

  @MimeType
  private String mimeType = "text/plain";
}

Это все, что вам нужно. Когда ваше приложение запускается, Spring Content увидит зависимости от модулей Spring Content JPA/REST и внедрит реализацию хранилища ResourceContentStore для JPA, а также реализацию контроллера (в /resourceContent), который поддерживает отображение GET, POST, Запросы PUT и DELETE на базовый интерфейс Store. Конечная точка REST будет доступна в разделе.

i.e.

curl -X PUT /resourceContent/{resourceId} создаст или обновит содержимое ресурса

curl -X GET /resourceContent/{resourceId} будет получать содержимое ресурса

curl -X DELETE /resourceContent/{resourceId} удалит содержимое ресурсов

здесь есть несколько руководств по началу работы. Они используют Spring Content для файловой системы, но модули взаимозаменяемы. Справочное руководство по JPA находится здесь. Также есть обучающее видео здесь.

ХТН

person Paul Warren    schedule 18.05.2018