我使用SpringBoot实现了一个上传REST web服务,它接收两个参数:
web服务代码如下:
@RequestMapping(value = "/uploadtest", consumes = { MediaType.MULTIPART_FORM_DATA}, method = RequestMethod.POST)
public ResponseEntity<Map<String, String>> upload(
@RequestParam("msg") String msg,
@RequestParam("file") MultipartFile file) {
System.out.println("uploadtest");
return new ResponseEntity<>(singletonMap("url", "uploadtest"), HttpStatus.CREATED);
}我正在努力创建泽西岛WS客户端。当WS只接收到MultipartFile参数时,以下代码可以正常工作:
Client client = ClientBuilder.newBuilder()
.register(MultiPartFeature.class).build();
WebTarget webTarget
= client.target("http://localhost:8080/uploadtest");
MultiPart multiPart = new MultiPart();
multiPart.setMediaType(MediaType.MULTIPART_FORM_DATA_TYPE);
FileDataBodyPart fileDataBodyPart = new FileDataBodyPart("file",
new File("/filename.xml"),
MediaType.APPLICATION_OCTET_STREAM_TYPE);
multiPart.bodyPart(fileDataBodyPart);
Response response = webTarget.request(MediaType.APPLICATION_JSON_TYPE)
.post(Entity.entity(multiPart, multiPart.getMediaType()));此外,如果这两个参数都是字符串,下面的代码也可以工作:
Client client = ClientBuilder.newClient(clientConfig);
WebTarget webTarget
= client.target("http://localhost:8080/uploadtest");
MultivaluedMap<String, String> formData = new MultivaluedHashMap<String, String>();
formData.add("msg", "msg1");
formData.add("mesgbis", "msg2");
String responseResult = webTarget.request()
.post(Entity.entity(formData, MediaType.MULTIPART_FORM_DATA), String.class);我想了解是否有一种方法可以在bodyPart对象上创建MultiPart,从而创建String和MultipartFile参数。如果不是这样,我如何完成对WS的请求?
发布于 2018-06-29 19:30:24
最后,我设法使其工作如下:
Client client = ClientBuilder.newBuilder()
.register(MultiPartFeature.class).build();
WebTarget webTarget
= client.target("http://localhost:8080/uploadtest");
MultiPart multiPart = new MultiPart();
multiPart.setMediaType(MediaType.MULTIPART_FORM_DATA_TYPE);
FileDataBodyPart fileDataBodyPart = new FileDataBodyPart("file",
new File("/filename.xml"),
MediaType.APPLICATION_OCTET_STREAM_TYPE);
FormDataBodyPart bodyPartMsg = new FormDataBodyPart("msg", "custom msg");
multiPart.bodyPart(bodyPartMsg);
multiPart.bodyPart(fileDataBodyPart);
Response response = webTarget.request(MediaType.APPLICATION_JSON_TYPE)
.post(Entity.entity(multiPart, multiPart.getMediaType()));发布于 2018-07-02 17:24:25
顺便说一句,使用OkHttp可以实现相同的行为
File uploadFile = new File(pathUploadFile);
RequestBody formBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("msg", job.toString())
.addFormDataPart("mesgbis", uploadFile.getName(), RequestBody.create(null, uploadFile))
.build();
Request request = new Request.Builder()
.url(url)
.post(formBody)
.build();
String retValue = "";
Response response = client.newCall(request).execute();https://stackoverflow.com/questions/51107870
复制相似问题