2

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

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

    private String contentType;
}

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

4

3 回答 3

2

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

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

我建议使用常规 Spring MVC 控制器进行文件上传/下载,其余部分使用 SDR(双关语)。

于 2014-03-11T18:29:55.440 回答
1

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 模块上的依赖关系,并且它将注入ResourceContentStoreJPA 存储的实现以及/resourceContent支持映射 GET、POST、PUT 和的控制器 (at)的实现对底层 Store 接口的 DELETE 请求。REST 端点将在下面可用。

IE

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

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

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

这里有一些入门指南。他们将 Spring Content 用于文件系统,但模块是可互换的。JPA 参考指南在这里这里有一个教程视频。

高温高压

于 2018-05-18T22:01:27.343 回答
1

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

于 2015-08-19T09:48:12.063 回答