我有一个spring数据休息服务,它公开了一个资源:
@Entity
public class Resource{
private String name;
@Lob
private byte[] data;
private String contentType;
}
json应该如何插入这种类型的资源?
答案 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