Java 使用json正文和多部分文件数组放置请求

Java 使用json正文和多部分文件数组放置请求,java,rest,spring-boot,postman,Java,Rest,Spring Boot,Postman,我有一个RESTJavaWebService,使用PUT方法更新员工 web服务应该包含一个文件列表和一个json,其中包含要更新的信息 该方法具有以下签名 @RequestMapping(value = "/employees/{employeeId}", method = RequestMethod.PUT, consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public ResponseEntity<?> updateEmplo

我有一个RESTJavaWebService,使用PUT方法更新员工

web服务应该包含一个文件列表和一个json,其中包含要更新的信息

该方法具有以下签名

@RequestMapping(value = "/employees/{employeeId}", method = RequestMethod.PUT, consumes = 
 MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<?> updateEmployee(
         @RequestPart EmployeeUserUpdateDto employeeDto,
         @PathVariable("employeeId") int employeeId,
         @RequestPart MultipartFile[] uploadedFiles, BindingResult bindingResult)
@RequestMapping(value=“/employees/{employeeId}”,method=RequestMethod.PUT,consumes=
MediaType.MULTIPART\u FORM\u DATA\u VALUE)
公共责任更新员工(
@RequestPart EmployeeUserUpdateDto employeeDto,
@路径变量(“employeeId”)int employeeId,
@RequestPart MultipartFile[]uploadedFiles,BindingResult BindingResult)
当我使用postman测试此请求时,如下图所示,它表示我的json不存在:


PS:我有一个添加员工的类似post请求,在相同的配置下工作得很好,这两个请求之间唯一的区别是pathvariable和PUT not post

附加方法:@ResponseBody

附加方法:@ResponseBody

您可以在dto包装器中获得多部分请求,如下所示:

@PutMapping("/upload-poc")
  ResponseEntity<?> uploadFileWithData(@ModelAttribute TestModel model){
    log.info("File Exist: {}",model.getImage().get(0).getOriginalFilename());
    log.info("Data: {}", model);
    return new ResponseEntity<>(HttpStatus.OK);
  }


@Getter
@Setter
@ToString
class TestModel{
  private List<MultipartFile> images;

  //@NotNull(message = "Name must be provided")
  @Size(min = 2, max = 6)
  private String name;

  private Long id;
}
@PutMapping(“/upload-poc”)
ResponseEntity uploadFileWithData(@ModelAttribute TestModel model){
log.info(“文件存在:{}”,model.getImage().get(0.getOriginalFilename());
log.info(“数据:{}”,模型);
返回新的响应状态(HttpStatus.OK);
}
@吸气剂
@塞特
@托斯特林
类测试模型{
私有列表图像;
//@NotNull(message=“必须提供名称”)
@尺寸(最小值=2,最大值=6)
私有字符串名称;
私人长id;
}
我在一个请求中上载了3个文件

以下是post man请求示例:


您可以在dto包装器中获得多部分请求,如下所示:

@PutMapping("/upload-poc")
  ResponseEntity<?> uploadFileWithData(@ModelAttribute TestModel model){
    log.info("File Exist: {}",model.getImage().get(0).getOriginalFilename());
    log.info("Data: {}", model);
    return new ResponseEntity<>(HttpStatus.OK);
  }


@Getter
@Setter
@ToString
class TestModel{
  private List<MultipartFile> images;

  //@NotNull(message = "Name must be provided")
  @Size(min = 2, max = 6)
  private String name;

  private Long id;
}
@PutMapping(“/upload-poc”)
ResponseEntity uploadFileWithData(@ModelAttribute TestModel model){
log.info(“文件存在:{}”,model.getImage().get(0.getOriginalFilename());
log.info(“数据:{}”,模型);
返回新的响应状态(HttpStatus.OK);
}
@吸气剂
@塞特
@托斯特林
类测试模型{
私有列表图像;
//@NotNull(message=“必须提供名称”)
@尺寸(最小值=2,最大值=6)
私有字符串名称;
私人长id;
}
我在一个请求中上载了3个文件

以下是post man请求示例:


nope响应正文和多部分表单数据不是朋友;)如果返回ResponseEntity,则无需添加@ResponseBodynope响应体,多部分表单数据不是朋友;)如果您返回ResponseEntity,则无需添加@ResponseBodycan您可以分享您如何测试它吗?我的意思是,在json内部,你是如何添加图像的?@kmararararrout屏幕截图补充道。如果我能进一步帮助你,请告诉我。我正在开发一个后端应用程序,它将有一个角度前端,我担心这会是前台人员的问题,我现在无法使用表单进行测试,所以我想知道这是否会接受表单上传的文件?我还可以通过ResponseBy更改modelAttribute吗?@kmarararkrout在angular中,它可以很容易地处理,而无需创建表单。所以不用担心这个。你可以采用这种方法。ResponseBy是类级注释,因此无需更改modelAttribute。您只需在方法上添加ResponseBy,而无需删除modelAttribute。事实上,在我的代码示例PostMapping和RestController中已经定义了ResponseBodyU可以共享吗?您如何测试这一点?我的意思是,在json内部,你是如何添加图像的?@kmararararrout屏幕截图补充道。如果我能进一步帮助你,请告诉我。我正在开发一个后端应用程序,它将有一个角度前端,我担心这会是前台人员的问题,我现在无法使用表单进行测试,所以我想知道这是否会接受表单上传的文件?我还可以通过ResponseBy更改modelAttribute吗?@kmarararkrout在angular中,它可以很容易地处理,而无需创建表单。所以不用担心这个。你可以采用这种方法。ResponseBy是类级注释,因此无需更改modelAttribute。您只需在方法上添加ResponseBy,而无需删除modelAttribute。事实上,在我的代码示例中,PostMapping和RestController已经定义了ResponseBy