如果我有
import lombok.Value;
@Value
public class IncomingRequest {
String data;
}
并尝试使用RequestHandler
,例如
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaHandler implements RequestHandler<IncomingRequest, String> {
@Override
public String handleRequest(IncomingRequest request, Context context) {
...
}
}
我只会得到空的request
对象,或者使用其他一些配置,我会得到反序列化异常。
我需要做什么来使AWS Lambda正确地反序列化到我的自定义类中?
2条答案
按热度按时间sf6xfgos1#
AWS Lambda使用Jackson来反序列化数据,因此需要一个无参数的构造函数和属性的setter。您可以将这些setter设置为公共的,但此时您有一个可变类,您通常不希望将其用于纯数据类。“幸运的是”Jackson无论如何都使用反射,因此可以(并且确实)访问私有方法。因此,您可以使用
@Value
而不是这样Jackson就可以正确解析传入的JSON,而类仍然是不可变的。显然,如果你想的话,你可以通过注解向该类添加更多的构造函数,只要你确保一个无参数的构造函数仍然存在。如果你想的话,你也可以安全地添加
@ToString @EqualsAndHashCode
。klsxnrf12#
您可以在
IncomingRequest
上使用@Jacksonized @Builder
。Jackson将使用该构建器创建示例,并且您的类将保持不变。