java – 在客户端接收多部分响应(ClosableHttpResponse)
发布时间:2020-12-15 04:37:49 所属栏目:Java 来源:网络整理
导读:我有一个 java控制器,它必须向我发送一些文本数据和不同的字节数组.所以我正在构建n多部分请求并将其写入来自HttpServletResponse的流. 现在我的问题是如何在客户端解析响应并提取多个部分. 服务器代码链: – MultipartEntityBuilder builder = MultipartEn
我有一个
java控制器,它必须向我发送一些文本数据和不同的字节数组.所以我正在构建n多部分请求并将其写入来自HttpServletResponse的流.
现在我的问题是如何在客户端解析响应并提取多个部分. 服务器代码链: – MultipartEntityBuilder builder = MultipartEntityBuilder.create(); // Prepare payload builder.addBinaryBody("document1",file); builder.addBinaryBody("document2",file2); builder.addPart("stringData",new StringBody(jsonData,ContentType.TEXT_PLAIN)); // Set to request body HttpEntity entity = builder.build(); postRequest.setEntity(entity); 客户代码SNIPPET: – HttpPost httpPost = new HttpPost(finalUrl); StringEntity entity = new StringEntity(json); httpPost.setEntity(entity); httpPost.setHeader("Content-type",APPLICATION_JSON_TYPE); ByteArrayOutputStream baos = new ByteArrayOutputStream(); CloseableHttpResponse response = httpClient.execute(httpPost); InputStream in = new BufferedInputStream(response.getEntity().getContent()); 我检查了CloseableHttpResponse和HttpEntity,但它们都没有提供解析多部分请求的方法. 编辑1: --bvRi5oZum37DUldtLgQGSbc5RRVZxKpjZMO4SYDe Content-Disposition: form-data; name="numeric" Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit 01010110 --bvRi5oZum37DUldtLgQGSbc5RRVZxKpjZMO4SYDe Content-Disposition: form-data; name="stringmessage" Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding:8bit testmessage --bvRi5oZum37DUldtLgQGSbc5RRVZxKpjZMO4SYDe Content-Disposition: form-data; name="binarydata"; filename="file1" Content-Type: application/octet-stream Content-Transfer-Encoding: binary HI,THIS IS MY BINARY DATA --bvRi5oZum37DUldtLgQGSbc5RRVZxKpjZMO4SYDe Content-Disposition: form-data; name="ending" Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit ending --bvRi5oZum37DUldtLgQGSbc5RRVZxKpjZMO4SYDe-- 解决方法
我终于得到了一个解决方法.
我将使用javax邮件MimeMultipart. 以下是解决方案的代码: – ByteArrayDataSource datasource = new ByteArrayDataSource(in,"multipart/form-data"); MimeMultipart multipart = new MimeMultipart(datasource); int count = multipart.getCount(); log.debug("count " + count); for (int i = 0; i < count; i++) { BodyPart bodyPart = multipart.getBodyPart(i); if (bodyPart.isMimeType("text/plain")) { log.info("text/plain " + bodyPart.getContentType()); processTextData(bodyPart.getContent()); } else if (bodyPart.isMimeType("application/octet-stream")) { log.info("application/octet-stream " + bodyPart.getContentType()); processBinaryData(bodyPart.getInputStream())); } else { log.warn("default " + bodyPart.getContentType()); } } 如果其他人有任何标准解决方案,请告诉我. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |