[英]Parsing Multipart/Mixed with Multipart/Alternative body in java
[英]Convert multipart body to java object
我正在尝试使用 java + camel 来读取多部分文件并将其转换为 object 来处理它。 我的多部分文件由两种数据组成:一个应用程序/json 和一个应用程序/八位字节流有没有办法将它转换为某种我可以使用的 object? 基本上,我正在向使用多部分文件响应的应用程序发送 get REST 请求。 我不知道如何转换响应正文:应用程序/json 到我的 POJO 和应用程序/八位字节流到 DataHandler
要在骆驼中处理多部分,您可以使用unmarshal().mimeMultipart()
。 在这一行之后,Camel Exchange 包含一个AttachmentMessage
,它的主体是多部分的第一部分。 接下来的部分可以通过在 Camel 处理器中调用attachmentMessage.getAttachmentObjects()
来获得。 有关unmarshal().mimeMultipart()
工作原理的更多信息,请参阅org.apache.camel.dataformat.mime.multipart.MimeMultipartDataFormat
中方法unmarshall()
的源代码。 进一步的行动取决于您的情况。 例如,如果 multipart 的第一部分始终包含SimplePojo
class 的 json object,那么您可以在 json 之后立即使用unmarshal().json(SimplePojo.class)
unmarshal().mimeMultipart()
然后骆驼身体将包含您的pojo。 下一部分的 DataHandlers 可以通过以下方式获得:
DataHandler dataHandler = attachmentObjects.get("test.txt").getDataHandler();
// test.txt comes from the filename field of the Content-Disposition header in case you have multipart/form-data.
以下是处理来自位于 {{http.url}} 的 REST 服务的响应的示例,采用以下形式的多部分格式:
--Boundary_2411_1961957611_1491990591774
Content-Disposition: form-data; name="part1"
Content-Type: application/json; charset=utf-8
{
"id": 123,
"name": "simple pojo"
}
--Boundary_2411_1961957611_1491990591774
Content-Disposition: form-data; name="part2"; filename="test.txt"
Content-Type: application/octet-stream
test
--Boundary_2411_1961957611_1491990591774--
骆驼路线建设者:
from("direct:start")
.setHeader(Exchange.HTTP_METHOD, constant(HttpMethods.GET))
.to("{{http.url}}")
.unmarshal().mimeMultipart()
.unmarshal().json(SimplePojo.class)
.process(exchange -> {
AttachmentMessage attachmentMessage = exchange.getMessage(AttachmentMessage.class);
SimplePojo simplePojo = attachmentMessage.getBody(SimplePojo.class);
Map<String, Attachment> attachmentObjects = attachmentMessage.getAttachmentObjects();
DataHandler dataHandler = attachmentObjects.get("test.txt").getDataHandler();
})
.to("mock:end");
简单的Pojo:
public class SimplePojo {
private Long id;
private String name;
//...
//getters, setters
}
为了使unmarshal().mimeMultipart()
和unmarshal().json(SimplePojo.class)
工作,您必须具有依赖项:
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-mail</artifactId>
<version>${camel.version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-jackson</artifactId>
<version>${camel.version}</version>
</dependency>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.