Spring Data Rest Jpa插入@Lob字段

时间:2014-03-10 21:59:20

标签: spring-data-rest

我有一个spring数据休息服务,它公开了一个资源:

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

    private String contentType;
}

json应该如何插入这种类型的资源?

3 个答案:

答案 0 :(得分:2)

AFAIK,SDR尚未处理多部分请求或响应,因为它只能执行JSON。

您可以在常规Spring MVC servlet的同时运行SDR(它是您配置中的一行代码)。

我建议使用常规的Spring MVC控制器进行文件上传/下载,然后使用SDR进行其他操作(双关语)。

答案 1 :(得分:1)

您不需要JSON。 “name”和“contentType”是http标题的一部分(分别是“Content-Type”和“Content-Disposition:filename”) “data”是HTTP正文。其编码取决于“内容编码” 也许你应该使用插入JPA的“ResourceResolvers”。

答案 2 :(得分:0)

Spring Content就是为此而设计的。

假设您正在使用Spring Boot,那么您可以按如下方式添加LOB处理:

  

的pom.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模块的依赖项,它将为JPA注入ResourceContentStore存储的实现以及控制器的实现(在/resourceContent)支持将GET,POST,PUT和DELETE请求映射到底层Store接口。 REST端点将在。

下可用

即。

curl -X PUT /resourceContent/{resourceId}将创建或更新资源的内容

curl -X GET /resourceContent/{resourceId}将获取资源的内容

curl -X DELETE /resourceContent/{resourceId}将删除资源内容

有几个入门指南here。他们使用Spring Content作为文件系统,但模块是可以互换的。 JPA参考指南是here。还有一个教程视频here

HTH