【问题标题】:Sending MultiPartFile as JSON request Property to Spring Boot REST COntroller将 MultiPartFile 作为 JSON 请求属性发送到 Spring Boot REST COntroller
【发布时间】:2021-02-09 09:27:39
【问题描述】:

我有一个如下所示的 JSON 请求,我想将我的文件 i-e(pdf、jpeg、png 等)附加为 JSON 请求正文的一部分,如下所示。 我将如何在 Spring Boot REST API 中做到这一点? 我的请求正文是:

    {
   "data":{
      "caseCategoryPrefix":"PF",
      "caseNumber":"last name",
      "caseStatusId":1,
      "caseCategoryId":1,
      "caseAttachments":[
         {
            "caseAttachmentId":1,
            "attachmentTypeId":1,
            "createdBy":"abc",
            "file":"" // here i want to attach my file 
         }
      ]
   }
}

【问题讨论】:

标签: java json spring spring-boot


【解决方案1】:

就我现在上传文件的正常做法是先上传,返回ID,然后保存数据对象。

示例 1:

在控制器中有 2 个端点。一个用于文件上传,第二个用于数据对象保存。 这种方法最适合较大的文件。

@PostMapping(
        value = "/file",
        produces = MediaType.APPLICATION_JSON_VALUE,
        consumes = MediaType.MULTIPART_FORM_DATA_VALUE
)
public String uploadFile(@RequestPart MultipartFile file) {
    // upload file and return generated id;
}

@PostMapping(value = "/data")
public void saveData(@RequestBody Data data) {
    // save data you described. Instead of "file:" save "fileId:"
}

示例 2:

拥有 1 个端点并在数据对象中插入文件作为字节数组。 这仅适用于小文件。据我所知,因为字节数组有一些长度限制。

@PostMapping(value = "/data")
public void saveData(@RequestBody Data data) {
    // save data you described with byte[] array in data object
}

【讨论】:

  • 感谢您的回答,Dumbo,该解决方案是有效的,但我有一个不同的场景,我必须将附件与其唯一 ID 及其在数据库中的类型相关联。就像我在数据库中保存 json 对象时一样,我需要保存“caseAttachments”对象,该对象具有附件信息及其保存的 url。
猜你喜欢
  • 2016-06-01
  • 2017-10-23
  • 1970-01-01
  • 2019-04-17
  • 1970-01-01
  • 2020-07-05
  • 1970-01-01
  • 2019-03-05
  • 1970-01-01
相关资源
最近更新 更多