【问题标题】:How to send the contents of a file downloaded from aws s3 using apache camel in json format?如何使用 apache camel 以 json 格式发送从 aws s3 下载的文件的内容?
【发布时间】:2020-07-05 00:09:21
【问题描述】:

我有一个使用 apache camel 的 rest api。当我在一条路线上发出一个发布请求时,它会从 S3 获取一个文件。这是那个的代码 ->

public static class HelloRoute extends RouteBuilder {
       
        @Override
        public void configure() {
            rest("/")
                .post("file-from-s3")
                    .route()
                    .setHeader(AWS2S3Constants.KEY, constant("filename"))
                    .to("aws2-s3://bucketname?accessKey=INSERT&secretKey=INSERT&region=INSERT&operation=getObject")
                    .endRest();
          }
}

这给出了 Postman 中文件的内容。我想要 json 格式的响应,其中文件的内容将在 json 的 content 键中。如何做到这一点?

【问题讨论】:

  • 创建一个与您的 json 格式匹配的 pojo,并使用 json 库(例如 jackson 或 gson)将您的文件映射到 pojo。然后,您可以随意操作 pojo。
  • @SneharghyaPathak 我只是这样做,但问题是我的身体在执行to 语句时属于software.amazon.awssdk.core.ResponseInputStream 类型。如何将其转换为字符串??
  • 你试过 convertBodyTo(String.class)
  • .process(new org.apache.camel.Processor(){ @Override public void process(Exchange exchange) throws Exception { String data = exchange.getIn().getBody(String.class); Response response = new Response(); response.setContent(data); exchange.getIn().setBody(response); } 我写了这个处理器,响应是 pojo。但是 setBody 没有给出文件的输出。
  • @SneharghyaPathak 你能看看这个stackoverflow.com/questions/62763173/…

标签: amazon-web-services amazon-s3 apache-camel


【解决方案1】:

确保您在 REST 配置中启用了绑定模式 (auto|json) 并在您的路线上设置了消费/生产。现在编写您的处理器来构建您的响应对象并将其设置在正文中。 Camel 将为您处理剩下的事情。

public static class HelloRoute extends RouteBuilder {

    restConfiguration().component("netty-http").host("localhost").port(portNum).bindingMode(RestBindingMode.auto);
   
    @Override
    public void configure() {
        rest("/")
            .post("file-from-s3")
                .consumes("application/json").type(YourRequest.class)
                .produces("application/json").outType(YourResponse.class)
                .route()
                .setHeader(AWS2S3Constants.KEY, constant("filename"))
                .to("aws2-s3://bucketname?accessKey=INSERT&secretKey=INSERT&region=INSERT&operation=getObject")
                //.process("responseBuilderProcessor")
                .endRest();
      }

}

【讨论】:

    猜你喜欢
    • 2021-10-03
    • 1970-01-01
    • 2015-05-26
    • 2017-01-12
    • 2013-01-18
    • 2014-09-12
    • 1970-01-01
    • 2017-01-23
    • 2017-11-21
    相关资源
    最近更新 更多