我正在尝试用POST中的multipart form-data调用@RequestPart服务SpringBoot
下面是可以与多个@RequestPart一起正常工作的代码

@PostMapping(value = "/saveDetails", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public void saveDetails(@RequestPart("profileImage") MultipartFile profileImage,@RequestPart("addressImage") MultipartFile addressImage, @RequestPart("requestData") String requestData) {
    try {
        if(CommonUtils.isObjectNullOrEmpty(requestData) || CommonUtils.isObjectNullOrEmpty(profileImage) || CommonUtils.isObjectNullOrEmpty(addressImage)){
            logger.warn("Data Should not be null ==>");
        }
        detailSaveService.saveOrUpdateDetails(profileImage, addressImage,requestData);

    } catch (Exception e) {
        logger.error("Error while saving profile Details ==>", e);
    }
}

我需要改善我的代码@RequestPart必须是单个参数才能上传
具有不同密钥(profileImageaddressImage)的多个文件。

有什么建议吗?请帮忙。

最佳答案

我有一个解决方案,请检查Spring-boot中的@ModelAttribute,请检查以下示例

使用getter setter创建类并为所有不同的关键参数添加数据成员,请参见以下示例

class FileUploadRequest  {
   private MultipartFile profileImage;
   private MultipartFile addressImage;
   private MultipartFile[] images; // you can use list or array
   private String requestData; // you can use another pojo or Jsonobject

   // add getter setter here...
}

在rest控制器中使用@ModelAttribute并使用消耗HTTP发布请求MULTIPART_FORM_DATA_VALUE
@PostMapping(value = "/saveDetails", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public void saveDetails(@ModelAttribute FileUploadRequest uploadRequest) {
  try {
      if(CommonUtils.isObjectNullOrEmpty(uploadRequest.getRequestData()) || CommonUtils.isObjectNullOrEmpty(uploadRequest.getProfileImage()) || CommonUtils.isObjectNullOrEmpty(uploadRequest.getAddressImage())){
          logger.warn("Data Should not be null ==>");
      } else {
          detailSaveService.saveOrUpdateDetails(uploadRequest.getProfileImage()), uploadRequest.getAddressImage()),uploadRequest.getRequestData()));
      }

   } catch (Exception e) {
       logger.error("Error while saving profile Details ==>", e);
   }
}

您可以参考@ModelAttributespring-bootangular这个link示例

希望对你有用

07-27 21:19