问题描述
我尝试使用webClient Spring5(multipart / form-data)上传文件,但是我得到了400 Badrequest,这是我的代码(当我尝试使用restTemplate都可以正常工作时),不明白为什么不能与webclient一起使用,任何帮助是宝贵的,在此先感谢...
MultipartBodyBuilder builder = new MultipartBodyBuilder();
builder.part("subject",parametres.getSubject());
builder.part("lifetime",parametres.getLifeTime());
builder.part("comment",parametres.getComment());
builder.part("encrypted",parametres.getEncrypted());
builder.part("file",new FileSystemResource(file)).filename(file.getName()) //file is a java.io.File`
ClientResponse response = getClient().post()
.uri("/messages")
.body(BodyInserters.fromMultipartData(builder.build()))
.header(PlinePlexHeaderEnum.HTTP_HEADER_PROCURATION_USER_ID.value(),idUser))
.header(HttpHeaders.CONTENT_TYPE,MediaType.MULTIPART_FORM_DATA_VALUE)
.exchange().block();
解决方法
尝试一下:
final WebClient webClient = webClientBuilder.build();
webClient.post()
.uri("http://hostname:port/messages")
.contentType(MediaType.MULTIPART_FORM_DATA)
.header(PlinePlexHeaderEnum.HTTP_HEADER_PROCURATION_USER_ID.value(),idUser))
.body(BodyInserters.fromMultipartData(buildMultipartBody(file,parametres)))
.retrieve()
.bodyToMono(String.class)
.block();
}
private MultiValueMap < String,HttpEntity << ? >> buildMultipartBody(private File file,private Parametres parametres) {
MultipartBodyBuilder builder = new MultipartBodyBuilder();
builder.part("file",new FileSystemResource(file));
builder.part("subject",parametres.getSubject()); `
builder.part("lifetime",parametres.getLifeTime());`
builder.part("comment",parametres.getComment()); `
builder.part("encrypted",parametres.getEncrypted());`
return builder.build();
}