Konwertowanie do JSON obiektu z typami String i plikami

0

Potrzebuję przesłać do kontrolera

@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
) {

obiekt DTO

@Getter
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;
}

@Getter
public class Photo extends MovieInfoDTO {
    private MultipartFile photo;
}

jako, że nie da rady wykonać tego żadnym narzędziem typu Postman czy Swagger, to potrzeba napisać test. Coś wyskrobałem, tylko podczas testowanie wyrzuca

com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class java.io.ByteArrayInputStream and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.common.dto.movie.request.ContributionNew["elementsToAdd"]->java.util.ArrayList[0]->com.common.dto.movie.Photo["photo"]->org.springframework.mock.web.MockMultipartFile["inputStream"])

Sam test wygląda w następujący sposób

@Test
    public void testCreatePhotoContribution() throws Exception {
        ContributionNew<Photo<MultipartFile>> contribution = new ContributionNew<>();
        Path path = Paths.get("C:\\Users\\Jonatan\\Pictures\\2.png");
        MockMultipartFile multipartFile = new MockMultipartFile("photo", "C:\\Users\\Jonatan\\Pictures\\2.png",
                "image/png", Files.readAllBytes(path));
        Photo.Builder<MultipartFile> photoBuilder = new Photo.Builder<>(
                multipartFile
        );
        contribution.getElementsToAdd().add(photoBuilder.build());

        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

        mockMvc
                .perform(fileUpload("/api/v1.0/movies/{id}/contributions/photos", 1)
                    .contentType(MediaType.APPLICATION_JSON)
                    .content(mapper.writeValueAsString(contribution)))
                .andExpect(status().isCreated());
    }
0

A nie powinno photo po prostu być typu byte[]? Multipart stosuje się w requestach html z formatki, a nie w jsonowych encjach.

1 użytkowników online, w tym zalogowanych: 0, gości: 1