【问题标题】:AWS Lambda: Jackson Annotations ignored when creating response in hosted versionAWS Lambda:在托管版本中创建响应时忽略了 Jackson 注释
【发布时间】:2017-07-07 09:15:29
【问题描述】:

我的 Lambda 函数的部分响应对象是一个包含 3 个数组的对象。对于任何给定的函数实例,只有其中一个具有任何内容。我使用了@JsonInclude 注释(我尝试在类级别使用它,在属性或getter 之上)告诉ObjectMapper 在创建响应时忽略空数组。这项工作在我的本地版本中发现,响应仅包含一个包含数据的数组,但是当我将其部署到我的实际 AWS Lambda 函数时,注释被忽略并且响应包含 3 个数组,其中 2 个是空的。代码如下:

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;

public class PcIODataSetString {

    @JsonInclude(Include.NON_EMPTY)
    private EventDef[] ttEventDefs;
    @JsonInclude(Include.NON_EMPTY)
    private EventTag[] ttEventTags;
    @JsonInclude(Include.NON_EMPTY)
    private EventObj[] ttEventObjs;

    //getters and setters
}

根据我的阅读,我认为这可能是版本问题,因为我使用的是 jackson-annotations-2.6.0,也许 AWS 使用 1.x 版本的 Lambda 函数?有什么办法可以强制 AWS 使用相同版本的 jackson? 2.6.0 jackson jar 存在于捆绑在我的 jar 中的 AWS SDK 库中。

【问题讨论】:

    标签: java amazon-web-services jackson aws-lambda


    【解决方案1】:

    正如您所指出的,AWS Java Lambda 必须对传递给您的句柄的对象进行一些反序列化,我同意您是正确的,因为版本可能会发生冲突。

    切换到不同的 JSON 序列化程序对您来说有多难?我已经多次使用Gson,在较新的版本中默认不包含空字段。

    要将对象序列化为 JSON,很简单:

    String jsonString = new Gson().toJson(yourObject);
    

    从 JSON 来看是这样的:

    YourObject yourObject = new Gson().fromJson(jsonString);
    

    同样,转换为不同的序列化程序可能会让您感到非常痛苦,但它可以避免对 Jackson 库版本的任何依赖。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      • 2015-10-19
      • 1970-01-01
      相关资源
      最近更新 更多