java - AWS Lambda/Firehose 是否支持 Base64 URL 解码?

标签 java amazon-web-services amazon-s3 aws-lambda amazon-kinesis-firehose

我的管道如下:

Firehose -> Lambda (AWS' Java SDK) -> (S3 & Redshift)

未编码的(原始)JSON 记录被提交到 Firehose。然后它会触发一个 Lambda 函数,对其进行轻微的转换。然后,Firehose 将转换后的记录放入 S3 存储桶和 Redshift 中。

为了让 Firehose 将转换后的数据添加到 S3,需要对数据进行 Base64 编码(Firehose 在将其添加到 S3 之前对其进行解码)。

但是,我的数据中有一个 URL,在解码时,= 字符将替换为其等效的 unicode 字符 (\u003d),因为它是 Amazon 的 Base64 解码器用作填充的字符。

https://www.[snipped].com/...?returnurl\u003dnull\u0026referrer\u003dnull

如何保留解码数据中的那些 = 字符?

注意:我尝试过使用 Base64.getUrlEncoder(),但 AWS 似乎仅支持 Base64.getEncoder()

最佳答案

事实证明,在我对 Lambda 记录进行(反)序列化时使用的 JSON 库 (Gson) 上启用了 HTML 转义。为了解决这个问题,我只需禁用 HTML 转义:

new GsonBuilder().disableHtmlEscaping().create();

关于java - AWS Lambda/Firehose 是否支持 Base64 URL 解码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51385855/

相关文章:

java - 解析 XML 不会显示所有项目

java - gradle-lombok 插件无法在单个项目中运行

amazon-web-services - 不支持 AWS SES 法兰克福区域

c# - 使用 API 从 Amazon S3 中删除文件夹

amazon-web-services - 如何使用 boto3 授予 ec2 实例访问 s3 的权限

java - SpringBootTest @EnabledWebSocket 忽略

java - 具有多个数字的正则表达式(前瞻)

amazon-web-services - 使用单个容器配置将端口映射添加到Dockerrun.aws.json

python - SparkContext 错误 - 找不到文件/tmp/spark-events 不存在

Django 存储 : Import Error - no module named storages