如何将传入的 AWS Lambda 请求反序列化为 lombok @Value 或 @Data 类?

问题描述 投票:0回答:3

如果我有一个

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 正确反序列化到我的自定义类中?

java amazon-web-services aws-lambda jackson lombok
3个回答
3
投票

AWS Lambda 使用 Jackson 反序列化数据,因此需要一个无参数构造函数和属性设置器。您可以将这些设置器公开,但此时您有一个可变类,并且您通常不希望将其用于纯数据类。 “幸运的是”杰克逊无论如何都使用反射,因此可以(并且确实)访问私有方法。因此,您可以使用

 而不是 
@Value

import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter(AccessLevel.PRIVATE)
public class IncomingRequest {
    String data;
}

这样 Jackson 就可以正确解析传入的 JSON,并且您的类仍然保持不可变。显然,如果您愿意,只要确保无参数构造函数仍然存在,您就可以通过注释向该类添加更多构造函数。添加如果您愿意,您也可以安全地添加

@ToString @EqualsAndHashCode


0
投票

您可以在

@Jacksonized @Builder
上使用
IncomingRequest
。 Jackson 将使用该构建器来创建实例,并且您的类将保持不可变。


-1
投票

我有一个关于 AWS 机器学习的问题想问您。 你能帮我解决这个问题吗?

如果你想给我发短信:

电子邮件:[电子邮件受保护] Instagram:isa.aydn

© www.soinside.com 2019 - 2024. All rights reserved.