json.simple.JSONObject无法使用AWS Lambda转换为java.lang.String JAVA
我试图使用Java Lambda从POST请求中解析“Body”。我遇到了这个错误一段时间。json.simple.JSONObject无法使用AWS Lambda转换为java.lang.String JAVA
org.json.simple.JSONObject cannot be cast to java.lang.String
但是,当记录的样子,身体:
{"body":{"email":"[email protected]"}}
女巫应与解析我'做正确的工作吗? 奇怪的是插入正在使用JUNIT进行本地化,但是在AWS之后没有联机。
@Override
public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
logger = context.getLogger();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
Number user_id = null;
String birthdate = null;
List<Number> company_id = new ArrayList<Number>();
String email = null;
String employment_status = null;
String firstname = null;
String lastname = null;
String login = null;
String profile = null;
List<Number> site_id = new ArrayList<Number>();
String validation_status = null;
JSONObject responseJson = new JSONObject();
Map<String, AttributeValue> expressionAttributeValues = new HashMap<String, AttributeValue>();
String filterExpression = "";
String RegionAWS = REGION.toString();
client = AmazonDynamoDBClientBuilder.standard().withRegion(RegionAWS).build();
DynamoDB dynamoDB = new DynamoDB(client);
Table table = dynamoDB.getTable("LI_user");
try {
JSONParser parser = new JSONParser();
JSONObject event = (JSONObject) parser.parse(reader);
logger.log(event.toJSONString());
if (event.get("body") != null) {
JSONObject bod = (JSONObject)parser.parse((String)event.get("body"));
// JSONObject bod = (JSONObject) event.get("body");
if (bod.get("id") != null) {
user_id = (Number)bod.get("id");
}
if (bod.get("birthdate") != null) {
birthdate = (String)bod.get("birthdate");
}
if (bod.get("email") != null) {
email = (String) bod.get("email");
}
if (bod.get("employment_status") != null) {
employment_status = (String) bod.get("employment_status");
}
if (bod.get("firstname") != null) {
firstname = (String) bod.get("firstname");
}
if (bod.get("lastname") != null) {
lastname = (String) bod.get("lastname");
}
if (bod.get("login") != null) {
login = (String) bod.get("login");
}
if (bod.get("profile") != null) {
profile = (String) bod.get("profile");
}
if (bod.get("validation_status") != null) {
validation_status = (String) bod.get("validation_status");
}
}
更换
JSONObject bod = (JSONObject)parser.parse((String)event.get("body"));
与
JSONObject bod = (JSONObject)event.get("body");
如果event
始终是JSONObject
实例(因为它似乎理所当然,否则你将在JSONObject event = (JSONObject) parser.parse(reader);
得到ClassCast)
您会看到登录
{"body":{"email":"[email protected]"}}
只是因为logger.log(event.toJSONString());
是的,谢谢你我有进步。 –
是感谢你,我有进步。 但现在它看起来像当我发送与邮差的JSON格式的数据,他收到一个字符串版本的身体。我得到的CloudWatch日志这样的数据:
"resource": "/users",
"httpMethod": "POST",
"queryStringParameters": null,
"stageVariables": null,
"body": "{\n \"id\": 5,\n \"company_id\": [\n 1\n ],\n \"email\": \"[email protected]\",\n \"employment_status\": \"FULL-TIME\",\n \"firstname\": \"Sebastien\",\n \"lastname\": \"LALALLALA\",\n \"login\": \"[email protected]\",\n \"profile\": \"FULL-TIME\",\n \"site_id\": \"55\",\n \"birthdate\": \"1985.05.05\",\n \"validation_status\" : \"COMPLETE\"\n}\n"
}
而这个错误:
java.lang.ClassCastException: java.lang.String cannot be cast to org.json.simple.JSONObject
你是从邮差发送一个原始的json主体吗?你设置了一个'contentType'头文件吗? 如果请求的结构是稳定的,你也可以考虑使用一个POJO,而不是从'InputStream'中使用并使用如此多的类型转换,即参见http://docs.aws.amazon.com/lambda/latest/dg /java-handler-io-type-pojo.html –
你好,是的,我发送原始json正文和内容类型设置为应用程序/ json –
您已经有了'logger.log(event.toJSONString());'为'event'是'JSONObject' 。 (JSONObject)parser.parse((String)event.get(“body”));' with 'JSONObject bod =(JSONObject)event.get(“body”);}为什么不更换'JSONObject bod = ' –