我给一个有json主体的aws lambda打电话。因此,json的字段与POJO中的字段具有不同的名称。所以我所做的就是在字段中添加@JsonProperty,告诉jackson 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"}
所有的字段都是空的,并且有明显的ID、userId、eventDateTime,它可以序列化,除了它也不能识别我的自定义序列化器/反序列化器,但这实际上是同一个问题。
我的结论是,出于某种原因,aws jackson没有使用注释,但它没有意义。
听起来,注释类型和数据绑定(ObjectMapper
)之间的版本不匹配:两者必须是相同的主版本。具体来说,杰克逊一号。x注释与Jackson 1一起使用。x数据绑定;和2。x加2。十、
通过Java包Jackson 1可以看到不同之处。x使用org。科德豪斯。杰克逊
,而杰克逊2。x使用com。fasterxml。杰克逊
。确保为使用的ObjectMapper
导入正确的注释。
请看AWS文档中的这段引用:
您不应该依赖序列化框架的任何其他功能,例如注释。如果需要自定义序列化行为,可以使用原始字节流来使用自己的序列化。
发件人:https://docs.aws.amazon.com/lambda/latest/dg/java-programming-model-req-resp.html
所以我找到了一个方法。您需要实现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注解可以这样做,但是我的字段已经用我的持久性注解进行了注解,所以我想避免重复,因为我已经有了我想忽略的注解的字段
我有一个
问题内容: 我正在用json主体调用aws lambda。因此json的字段与POJO中的字段名称不同。所以我要做的是在字段上添加@JsonProperty来告诉杰克逊json中的名字是什么。但是由于某种原因,它似乎无法识别它们,并且所有字段均为空。如果我传递一个具有与POJO相同的字段名称的json,那么它将起作用。这是我的课: 如果我通过 所有字段均为null,并且具有distinctId,u
课程对象不包装在标记中 某些属性是属性 我需要如何注释我的对象以使FasterXML反序列化这个XML?
问题内容: 我和Jackson有一个问题,我认为应该很容易解决,但是这真使我丧命。 假设我有一个看起来像这样的Java POJO类(假设对我来说是Getters和Setters): 我想将看起来像这样的JSON反序列化为User对象: 杰克逊给了我一些问题,因为用户不是JSON中的第一级对象。我显然可以制作一个具有单个User对象的UserWrapper类,然后使用该对象反序列化,但是我知道必须有
下面是输出: 我的分级文件中的版本号: