Hri*_*lov 13 java jackson aws-lambda
我正在用一个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
}
Run Code Online (Sandbox Code Playgroud)
如果我通过
{"distinct_id":"123", "user_id":123, "dt":"2017-01-04T08:45:04+00:00"}
Run Code Online (Sandbox Code Playgroud)
所有字段都为null,并且使用distinctId,userId,eventDateTime,它正在序列化,但它也无法识别我的自定义序列化器/反序列化器,但这实际上是同样的问题.
我的结论是,由于某些原因,aws jackson没有使用注释,但它没有意义.
Hri*_*lov 16
所以我找到了一种方法来做到这一点.您需要实现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
}
}
Run Code Online (Sandbox Code Playgroud)
拥有输入和输出流使您可以独立于用于解析它的格式和框架.
看看 AWS 文档中的这句话:
您不应该依赖序列化框架的任何其他功能,例如注释。如果您需要自定义序列化行为,您可以使用原始字节流来使用您自己的序列化。
来自:https : //docs.aws.amazon.com/lambda/latest/dg/java-programming-model-req-resp.html
| 归档时间: |
|
| 查看次数: |
5591 次 |
| 最近记录: |