AWS,Lambda,Java,POJO,自定义json属性名称

时间:2016-07-08 19:54:31

标签: java json amazon-web-services aws-lambda pojo

使用Lambda进行首次尝试。创建代码,部署,测试工作,但是:

public String handleRequest(MyType inObj, Context context) {
    // logging inObj here
}

POJO班

public class MyType {
    String prop;
    String otherProp;
}

在调用时,我提供以下有效负载:

{ "prop": "val1", "other_prop": "val2" }

如你所见,我想用snake_case给json。 当lambda记录时,我可以看到

  

inObj.prop ==“val1”

     

inObj.otherProp ==“null”。

当我将jSON从snake_case更改为camelCase时,它被正确地反序列化并且otherProp ==“val2”。 我尝试将@JsonProperty(“other_prop”)添加到字段中,添加getter和setter(在camelCase中)并将@JsonProperty添加到那些(随机猜测),但没有任何改变。

问:如何描述MyType类,以便AWS Lambda将其从snake_case正确反序列化为camelCase?

2 个答案:

答案 0 :(得分:5)

请参阅http://docs.aws.amazon.com/lambda/latest/dg/java-programming-model-req-resp.html

中的注释
  

请注意

     

您不应该依赖序列化的任何其他功能   框架,如注释。如果你需要自定义   序列化行为,您可以使用原始字节流来使用您的   自己的序列化。

因此,您需要从输入流序列化对象以使用注释。

http://docs.aws.amazon.com/lambda/latest/dg/java-handler-io-type-stream.html

package example;

import java.io.InputStream;
import java.io.OutputStream;
import com.amazonaws.services.lambda.runtime.RequestStreamHandler;
import com.amazonaws.services.lambda.runtime.Context; 

public class Hello implements RequestStreamHandler {
    public static void handler(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
        // TODO Serialize Object from inputStream
    }
}

答案 1 :(得分:0)

这看起来类似于Capitalized fields with POJO Input Handlers for Java AWS Lambda

类似于那里的答案,您可以尝试使用具有 public 字段的pojo,这些字段的名称与json字段完全相同