Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将多部分主体转换为java对象_Java_Spring Boot_Apache Camel_Multipartform Data_Multipart - Fatal编程技术网

将多部分主体转换为java对象

将多部分主体转换为java对象,java,spring-boot,apache-camel,multipartform-data,multipart,Java,Spring Boot,Apache Camel,Multipartform Data,Multipart,我正在尝试使用java+camel来读取一个多部分文件,并将其转换为对象来处理它。 我的多部分文件由两种数据组成:application/json和application/octet流 有没有办法把它转换成某种我可以使用的对象? 基本上,我向一个应用程序发送一个get REST请求,该应用程序使用一个多部分文件进行响应。我不知道如何转换响应体:将应用程序/json转换为我的POJO,将应用程序/octet流转换为DataHandler要在camel中处理多部分,可以使用unmarshal().m

我正在尝试使用java+camel来读取一个多部分文件,并将其转换为对象来处理它。 我的多部分文件由两种数据组成:application/json和application/octet流 有没有办法把它转换成某种我可以使用的对象?
基本上,我向一个应用程序发送一个get REST请求,该应用程序使用一个多部分文件进行响应。我不知道如何转换响应体:将应用程序/json转换为我的POJO,将应用程序/octet流转换为DataHandler

要在camel中处理多部分,可以使用
unmarshal().mimeMultipart()
。在这一行之后,Camel Exchange包含一个
AttachmentMessage
,它的主体是多部分的第一部分。接下来的部分可以通过调用Camel处理器中的
attachmentMessage.getAttachmentObjects()
来获得。有关
unmarshal().mimeMultipart()
如何工作的更多信息,请参阅
org.apache.camel.dataformat.mime.multipart.mimememultipartdataformat
中方法
unmarshall()
的源代码。 进一步的行动取决于你的情况。例如,如果多部分的第一部分始终包含
SimplePojo
类的json对象,则可以在
unmarshal().json(SimplePojo.class)
之后立即使用
unmarshal().mimeMultipart()
。然后骆驼的身体将包含你的pojo。以下部分的数据处理程序可按如下方式获得:

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");
要使
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>

org.apache.camel
骆驼邮件
${camel.version}
org.apache.camel
骆驼杰克逊
${camel.version}
<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>