Я реализовал веб-сервис REST для загрузки с использованием SpringBoot, который получает 2 параметра:
Код веб-службы выглядит следующим образом:
@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);
}
Я работаю, пытаясь создать клиент Jersey 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()));
Кроме того, если оба параметра были String, также работает следующий код:
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?