0

我对休息骆驼组件的发布请求的正文不是 json 的形式。因此我无法提取键值对。如何将正文转换为 json?我发送了一个这种类型的 json 对象

{
    "filename": "hello.txt",
    "bucketName": "cameltry",
    "accessKey":  "key",
    "secretKey": "key",
    "region" : "us-east-1"
}

我必须使用这个 json 数据从 AWS S3 下载文件。骆驼中对应的路线是:

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

这里$body[filename]结果是 null 因为$body不是 json 对象。如何将其转换为 json 对象?

4

3 回答 3

0

如果上面建议的答案对您不起作用,您可能会考虑使用org.json库进行 JSON 解析。bindingMode(RestBindingMode.json)

资源

于 2020-06-29T21:06:45.947 回答
0

您可以使用标准 json xstream 库,或使用https://camel.apache.org/manual/latest/json.html中的其他选项之一将其编组为 POJO。

public static class HelloRoute extends RouteBuilder {
   
    @Override
    public void configure() {
        rest("/")
            .post("file-from-s3")
                .route()
                .marshal().json()
                .setHeader(AWS2S3Constants.KEY, constant($body[filename]))
                .toD("aws2-s3://${body[bucketName]}?accessKey=${body[accessKey]}&secretKey=${body[secretKey]}&region=${body[region]}&operation=getObject")
                .to("file:/tmp/")
                .endRest();
    }
于 2020-07-01T18:09:48.447 回答
0

你可以做 .post("file-from-s3").bindingMode(RestBindingMode.json)

于 2020-06-29T20:57:00.380 回答