Java Lambda中S3事件的自动反序列化
我已经编写了一个lambda处理程序,它将POJO作为参数并尝试打印它。当我将json文件放入配置的s3存储桶中时,会触发事件,但是pojo中的所有值都为null。但是当我使用S3Event作为参数时,我得到了预期的值(bucket name、key等) 所以我的问题是——有没有人见过自动反序列化在AWS Lambdas中使用S3和java 这是我的简化处理程序Java Lambda中S3事件的自动反序列化,java,json,amazon-s3,lambda,pojo,Java,Json,Amazon S3,Lambda,Pojo,我已经编写了一个lambda处理程序,它将POJO作为参数并尝试打印它。当我将json文件放入配置的s3存储桶中时,会触发事件,但是pojo中的所有值都为null。但是当我使用S3Event作为参数时,我得到了预期的值(bucket name、key等) 所以我的问题是——有没有人见过自动反序列化在AWS Lambdas中使用S3和java 这是我的简化处理程序 public void handleRequest(ConsolidationJob job, Context context) {
public void handleRequest(ConsolidationJob job, Context context) {
logger.info("Triggered job: " + job.toString());
}
这是我的pojo
public class ConsolidationJob {
private List<String> files;
public List<String> getFiles() {
return files;
}
public void setFiles(List<String> files) {
this.files = files;
}
@Override
public String toString() {
return "ConsolidationJob{" +
"files=" + files +
'}';
在我看到的日志中
2017-01-04 12:10:38 <cd42ce01-d276-11e6-bb24-2776804ea5f4> INFO uk.co.avro.FilesConsolidator:40 - Triggered job: ConsolidationJob{files=null}
它是通过正确的事件调用的,我可以从中获取bucket名称和密钥,以便继续并提取文件。但这意味着我必须手动进行反序列化。看起来不可能,主要是因为S3中的内容可以是任何类型,而不仅仅是json 最后,我使用了第二种方法,使用S3Event作为参数,从中获取bucket和key,然后使用Jackson将inputstream解析为POJO
2017-01-04 12:10:38 <cd42ce01-d276-11e6-bb24-2776804ea5f4> INFO uk.co.avro.FilesConsolidator:40 - Triggered job: ConsolidationJob{files=null}
public void handleRequest(S3Event job, Context context) {
logger.info("Triggered s3event: " + job.toJson());
}