繁体   English   中英

将多部件体转换为 java object

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM