当前位置: 首页 > 面试题库 >

带有杰克逊注释的AWS Lambda json反序列化

淳于飞鸾
2023-03-14
问题内容

我正在用json主体调用aws
lambda。因此json的字段与POJO中的字段名称不同。所以我要做的是在字段上添加@JsonProperty来告诉杰克逊json中的名字是什么。但是由于某种原因,它似乎无法识别它们,并且所有字段均为空。如果我传递一个具有与POJO相同的字段名称的json,那么它将起作用。这是我的课:

public class Event implements Identifiable {

    @JsonProperty("distinct_id")
    private String distinctId;

    @JsonProperty("user_id")
    private Integer userId;

    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
    @JsonSerialize(using = LocalDateTimeSerializer.class)
    private LocalDateTime eventDateTime;

    //Here are the getters and setters
}

如果我通过

{"distinct_id":"123", "user_id":123, "dt":"2017-01-04T08:45:04+00:00"}

所有字段均为null,并且具有distinctId,userId,eventDateTime,可以序列化,除了它也不能识别我的自定义序列化器/反序列化器,但这实际上是相同的问题。

我的结论是,由于某些原因,aws jackson无法使用注释,但这没有任何意义。


问题答案:

所以我找到了一种方法。您需要实现RequestStreamHandler,它为您提供可以使用的输入和输出流:

import com.amazonaws.services.lambda.runtime.RequestStreamHandler

public class ChartHandler implements RequestStreamHandler {
    private ObjectMapper objectMapper = new ObjectMapper();

    @Override
    public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
        DeserializationClass deserializedInput = objectMapper.readValue(inputStream, DeserializationClass.class)
        objectMapper.writeValue(outputStream, deserializedInput); //write to the outputStream what you want to return
    }

}

具有输入和输出流使您独立于用于解析它的格式和框架。



 类似资料:
  • 问题内容: 我想在使用Jackson时定义我的自定义序列化策略(要包括的字段)。我知道,我可以使用视图/过滤器来做到这一点,但是它引入了非常不好的一件事- 使用字段名称的字符串表示形式,这会自动导致自动重构出现问题。 如何迫使Jackson序列化仅带注释的属性,仅此而已? 问题答案: 如果禁用所有自动检测,则应仅序列化已注释的属性-无论是属性本身还是吸气剂。这是一个简单的例子:

  • 问题内容: 我有一个Web服务的结果,该结果返回布尔值或单例映射,例如 布尔结果: 地图结果: 单独地,我可以轻松地映射这两个位置,但是我该如何做呢? 基本上我想将其映射到一个类: 所有所有多态示例都用于基于数据中的属性进行映射,但是在这种情况下,我没有该选项。 编辑 代码的更新部分: 问题答案: 不不不。您不必编写自定义解串器。只需先使用“无类型”映射: 给出“定级” 价值或“定级”价值(采用第

  • 问题内容: 我有一个JSON字符串,将标记为而不是。因此,例如,如果我有一个没有子对象的对象,我将收到类似以下的字符串: 我想将其反序列化为Parent类,并将子级正确设置为一个空的子级列表。 对于上述JSON字符串,我想要一个对象,其设置为,而设置为。 我会知道如何在整个课堂上使用注释 然后 但是,我想解决一个从字符串正确实例化List的一般问题: 我能得到类似的东西吗? 问题答案: 几个选择;

  • 我明白它无法从嵌套JSON反序列化字符串。我解决这个问题的一个方法是通过编写自定义映射器 但是只要pojo中有变化,这就需要修改映射器,添加/删除字段。Mixin工作时没有任何变化,我该如何更新我的Mixin来处理objectId呢?

  • 我想用scala中的jackson反序列化json json_结构: {“type”:“struct”,“fields”:[{“name”:“code_role”,“type”:“string”,“nullable”:true,“metadata”:{“HIVE_type_string”:“string”},{“name”:“libelle_role”,“type”:“string”,“nulla

  • 问题内容: 我的问题很简单:我有以下简单的类: 我正在尝试处理以下JSON: 显然,这里存在一个问题(“ blah”无法解析为int) 以前,Jackson抛出类似org.codehaus.jackson.map.JsonMappingException的内容:无法从字符串值’blah’构造java.lang.Integer的实例:不是有效的Integer值 我同意这一点,但是我想在某个地方注册一