【发布时间】:2020-04-18 02:53:46
【问题描述】:
我是 Java 新手,所以这可能与 AWS lambda 完全无关。但是,lambda 对输入/输出对象如此随意,我认为这是罪魁祸首。
我正在构建我的第一个 lambda 函数并希望返回一个简单的 JSON 结构(本示例进一步简化):
{
"document" : "1",
"person" : { "name" : "John Doe" }
}
但是,当 lambda 序列化 JSON 时,它总是将“人”设置为空白对象!
{
"document": "1",
"person": {}
}
这是我的完整代码:
- test1.java
package handler_test;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class test1 implements RequestHandler<String, ResponseClass> {
@Override
public ResponseClass handleRequest(String input, Context context) {
return new ResponseClass();
}
}
- ResponseClass.java
package handler_test;
import org.json.JSONException;
import org.json.JSONObject;
public class ResponseClass {
String document;
JSONObject person;
public String getdocument() {
return "1";
}
public JSONObject getperson() {
try {
return new JSONObject("{ \"name\" : \"John Doe\" }");
} catch (JSONException e1) {
System.out.println("error creating jsonobject");
return null;
}
}
public ResponseClass() {
}
}
我已经尝试了几十种变体,使用对象而不是 JSONObjects,将 getperson 输出转换为字符串(如果我想要字符串,它可以工作)等等。如果我存储值并将它们打印到记录器,没关系。但是一旦我尝试通过 lambda 返回它,它就会变成梨形。我已经梳理了网络,除了亚马逊的“问候”示例代码(仅包含两个字符串)之外,在 AWS-lambda java 响应对象上找不到更多内容。任何建议都非常感谢!
【问题讨论】:
-
谢谢。这就是我提到的“问候”示例代码,它只返回一个简单的对象。 AWS 没有任何返回更复杂的样本。他们确实提到,如果开箱即用的序列化对您不起作用,您可以编写自己的 JSON 序列化,但不要说该怎么做!作为 java 和 lambda 的新手,我很茫然。 (坦率地说,在 JSON 对象中返回 JSON 对象似乎不是一个不寻常的请求,我应该使用自己的工具,尽管似乎没有其他人在 lambda 中这样做。)
-
嘿@Gregg 你对这个问题有正确的解决方案吗?如果是,请在这里分享。我也想回答这个问题。
标签: java json amazon-web-services aws-lambda