I am not able to upload a file with a WebTestClient in a SpringBootApplicationTest
This is my test:
<code>@SpringBootTest(classes = {Application.class}, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class ApplicationTest {
@Autowired
private WebTestClient webTestClient;
@Test
void saveDocumentSuccessfully() throws IOException {
webTestClient.post().uri("/upload")
.contentType(MediaType.MULTIPART_FORM_DATA)
.body(BodyInserters.fromMultipartData(createMultipartBodyBuilder().build()))
.exchange()
.expectStatus().is2xxSuccessful();
}
private @NotNull MultipartBodyBuilder createMultipartBodyBuilder() throws IOException {
final MultipartBodyBuilder multipartBodyBuilder = new MultipartBodyBuilder();
multipartBodyBuilder.part("document",
Files.readAllBytes(Path.of("src/test/resources/thumb_oct22_02.jpg")),
MediaType.IMAGE_JPEG);
return multipartBodyBuilder;
}
}
</code>
<code>@SpringBootTest(classes = {Application.class}, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class ApplicationTest {
@Autowired
private WebTestClient webTestClient;
@Test
void saveDocumentSuccessfully() throws IOException {
webTestClient.post().uri("/upload")
.contentType(MediaType.MULTIPART_FORM_DATA)
.body(BodyInserters.fromMultipartData(createMultipartBodyBuilder().build()))
.exchange()
.expectStatus().is2xxSuccessful();
}
private @NotNull MultipartBodyBuilder createMultipartBodyBuilder() throws IOException {
final MultipartBodyBuilder multipartBodyBuilder = new MultipartBodyBuilder();
multipartBodyBuilder.part("document",
Files.readAllBytes(Path.of("src/test/resources/thumb_oct22_02.jpg")),
MediaType.IMAGE_JPEG);
return multipartBodyBuilder;
}
}
</code>
@SpringBootTest(classes = {Application.class}, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class ApplicationTest {
@Autowired
private WebTestClient webTestClient;
@Test
void saveDocumentSuccessfully() throws IOException {
webTestClient.post().uri("/upload")
.contentType(MediaType.MULTIPART_FORM_DATA)
.body(BodyInserters.fromMultipartData(createMultipartBodyBuilder().build()))
.exchange()
.expectStatus().is2xxSuccessful();
}
private @NotNull MultipartBodyBuilder createMultipartBodyBuilder() throws IOException {
final MultipartBodyBuilder multipartBodyBuilder = new MultipartBodyBuilder();
multipartBodyBuilder.part("document",
Files.readAllBytes(Path.of("src/test/resources/thumb_oct22_02.jpg")),
MediaType.IMAGE_JPEG);
return multipartBodyBuilder;
}
}
This is my UploadController:
<code>@RestController
public class UploadController {
@PostMapping(value ="/upload")
public void upload(@RequestPart final MultipartFile document) {
System.out.println("File uploaded: " + document.getOriginalFilename());
}
}
</code>
<code>@RestController
public class UploadController {
@PostMapping(value ="/upload")
public void upload(@RequestPart final MultipartFile document) {
System.out.println("File uploaded: " + document.getOriginalFilename());
}
}
</code>
@RestController
public class UploadController {
@PostMapping(value ="/upload")
public void upload(@RequestPart final MultipartFile document) {
System.out.println("File uploaded: " + document.getOriginalFilename());
}
}
I do get the error
<code>{"type":"about:blank","title":"Bad Request","status":400,"detail":"Required part 'document' is not present.","instance":"/upload"}
</code>
<code>{"type":"about:blank","title":"Bad Request","status":400,"detail":"Required part 'document' is not present.","instance":"/upload"}
</code>
{"type":"about:blank","title":"Bad Request","status":400,"detail":"Required part 'document' is not present.","instance":"/upload"}
back
If I run the application locally, I can upload a file with a external restclient. What do I do wrong?