首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SpringBoot WebService client: MultipartFile和String参数

SpringBoot WebService client: MultipartFile和String参数
EN

Stack Overflow用户
提问于 2018-06-29 18:56:27
回答 2查看 852关注 0票数 1

我使用SpringBoot实现了一个上传REST web服务,它接收两个参数:

  • 字符串消息
  • 档案

web服务代码如下:

代码语言:javascript
复制
@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参数时,以下代码可以正常工作:

代码语言:javascript
复制
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()));

此外,如果这两个参数都是字符串,下面的代码也可以工作:

代码语言:javascript
复制
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的请求?

EN

回答 2

Stack Overflow用户

发布于 2018-06-29 19:30:24

最后,我设法使其工作如下:

代码语言:javascript
复制
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()));
票数 1
EN

Stack Overflow用户

发布于 2018-07-02 17:24:25

顺便说一句,使用OkHttp可以实现相同的行为

代码语言:javascript
复制
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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51107870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档