我想将一个对象发送到控制器,该对象具有多个包含文件的列表和多个包含纯文本的字段。
public class ContributionNew<T extends MovieInfoDTO> {
private List<T> elementsToAdd;
private Map<Long, T> elementsToUpdate;
private Set<Long> idsToDelete;
private Set<String> sources;
private String comment;
}
public class Photo extends MovieInfoDTO {
private MultipartFile photo;
}
@PostMapping(value = "/{id}/contributions/photos")
@ResponseStatus(HttpStatus.CREATED)
public
ResponseEntity<Void> createPhotoContribution(
@ApiParam(value = "The movie ID", required = true)
@PathVariable("id") final Long id,
@ApiParam(value = "The contribution", required = true)
@RequestBody @Valid final ContributionNew<Photo> contribution
) {
我想创建一个测试来发送对象,但我不知道如何完成它。
@Test
public void testCreatePhotoContribution() throws Exception {
ContributionNew<Photo> contribution = new ContributionNew<>();
MockMultipartFile multipartFile = new MockMultipartFile("photo", "C:\\Users\\Jonatan\\Pictures\\2.png",
"image/png", "Spring Framework".getBytes());
Photo.Builder photoBuilder = new Photo.Builder(
multipartFile
);
contribution.getElementsToAdd().add(photoBuilder.build());
mockMvc
.perform(post("/api/v1.0/movies/{id}/contributions/photos", 1)
.contentType(...)
.content(...))
.andExpect(status().isCreated());
}
我不知道如何为传输的数据设置正确的类型,设置内容。仅有关仅发送文件(不在对象中)的教程可用。但没有指南表明文件是对象中的字段之一。怎么办?
对于那些想知道的人: 您可以发送 MultipartFile 和一些纯文本字段,以映射到控制器中的 1 个对象。看看我的例子。 达:
public class NewFileInfoDto {
@NotNull
@Positive()
private Long requestId;
@NotNull
private MultipartFile file;
}
控制器:
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public FileInfoDto addFile(@ModelAttribute @Valid NewFileInfoDto dto) {
return fileService.addFile(dto);
}
测试部分:
mockMvc.perform(multipart("/file")
.file(file)
.param("requestId", "3")
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isCreated());
```