And*_*niy 5 java json amazon-web-services jackson aws-lambda
根据此处描述的文档:http : //docs.aws.amazon.com/lambda/latest/dg/java-programming-model-req-resp.html一个人可以创建自己的POJO来序列化Java AWS的输入和输出Lambda。
但是,它似乎不适用于大写字段的输入请求。例如,自定义资源lambda的输入格式如下:
{"RequestType":"Create",
"ServiceToken":"arn:aws:lambda:....",
"ResponseURL":"https://cloudformation-custom-resource-response-e...",
...}
Run Code Online (Sandbox Code Playgroud)
可以通过以下简单的MCVE代码轻松测试:
package test;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class TestLambda implements RequestHandler<TestLambda.TestEvent, String> {
private static final Logger logger = LogManager.getLogger(TestLambda.class);
@Override
public String handleRequest(TestEvent event, Context context) {
logger.debug(event.toString());
return null;
}
public static final class TestEvent {
private String key1;
private String Key2;
private String key3;
public String getKey1() {
return key1;
}
public void setKey1(String key1) {
this.key1 = key1;
}
public String getKey2() {
return Key2;
}
public void setKey2(String key2) {
Key2 = key2;
}
public String getKey3() {
return key3;
}
public void setKey3(String key3) {
this.key3 = key3;
}
@Override
public String toString() {
return "TestEvent{" +
"key1='" + key1 + '\'' +
", Key2='" + Key2 + '\'' +
", key3='" + key3 + '\'' +
'}';
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在AWS控制台中为此lambda创建一个测试,并将以下json作为请求传递给它:
{
"key3": "value3",
"Key2": "value2",
"Key1": "value1"
}
Run Code Online (Sandbox Code Playgroud)
日志中的结果将是:
2017-11-06 09:30:13 16849696-c2d5-11e7-80c3-150a37863c42 DEBUG TestLambda:15 - TestEvent{key1='null', Key2='null', key3='value3'}
Run Code Online (Sandbox Code Playgroud)
有什么办法可以反序列化此输入,而不必像在该主题中所建议的那样处理原始字节流?
您不应该依赖序列化框架的任何其他功能,例如注释。如果需要自定义序列化行为,则可以使用原始字节流来使用自己的序列化。
如果我们不能为任何类型的事件自由创建POJO,那么对我来说,这似乎是Java AWS Lambda的一个很大限制。
jin*_*ngx -3
Java bean 上的属性仍然是,全部key2小写,因为序列化框架可见的属性名称是从 getter 派生的,而不是私有字段名称。所以它仍然进入输入事件寻找key2not Key2。
| 归档时间: |
|
| 查看次数: |
760 次 |
| 最近记录: |