无法使用AWS Lambda java将json.simple.JSONObject转换为java.lang.String
我正试图用Java Lambda解析POST请求中的“Body”。 我被这个错误困扰了一段时间无法使用AWS Lambda java将json.simple.JSONObject转换为java.lang.String,java,json,amazon-web-services,amazon-dynamodb,aws-lambda,Java,Json,Amazon Web Services,Amazon Dynamodb,Aws Lambda,我正试图用Java Lambda解析POST请求中的“Body”。 我被这个错误困扰了一段时间 org.json.simple.JSONObject cannot be cast to java.lang.String 但记录时的身体是这样的: {"body":{"email":"test@test.com"}} 女巫应该和解析一起工作,我做得对吗? 奇怪的是,insert正在与JUNIT一起在本地工作,但在AWS上之后就不再在线了。 @Override public void handl
org.json.simple.JSONObject cannot be cast to java.lang.String
但记录时的身体是这样的:
{"body":{"email":"test@test.com"}}
女巫应该和解析一起工作,我做得对吗?
奇怪的是,insert正在与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");
}
}
@覆盖
公共void handleRequest(InputStream InputStream、OutputStream OutputStream、上下文上下文)引发IOException{
logger=context.getLogger();
BufferedReader reader=新的BufferedReader(新的InputStreamReader(inputStream));
Number user_id=null;
字符串birthdate=null;
列表公司_id=new ArrayList();
字符串email=null;
字符串状态=空;
字符串firstname=null;
字符串lastname=null;
字符串login=null;
字符串配置文件=null;
List site_id=new ArrayList();
字符串验证\u状态=空;
JSONObject responseJson=新的JSONObject();
Map expressionAttributeValues=新HashMap();
字符串filterExpression=“”;
字符串RegionAWS=REGION.toString();
client=AmazonDynamoDBClientBuilder.standard().withRegion(RegionAWS.build();
DynamoDB DynamoDB=新DynamoDB(客户);
Table=dynamoDB.getTable(“LI_用户”);
试一试{
JSONParser=新的JSONParser();
JSONObject事件=(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){
用户id=(Number)bod.get(“id”);
}
if(bod.get(“生日”)!=null){
birthdate=(字符串)bod.get(“birthdate”);
}
如果(bod.get(“email”)!=null){
email=(字符串)bod.get(“email”);
}
如果(董事会获取(“就业状况”)!=null){
就业状况=(字符串)bod.get(“就业状况”);
}
if(bod.get(“firstname”)!=null){
firstname=(字符串)bod.get(“firstname”);
}
if(bod.get(“lastname”)!=null){
lastname=(字符串)bod.get(“lastname”);
}
if(bod.get(“登录”)!=null){
login=(字符串)bod.get(“login”);
}
if(bod.get(“profile”)!=null){
profile=(字符串)bod.get(“profile”);
}
if(bod.get(“验证状态”)!=null){
验证状态=(字符串)bod.get(“验证状态”);
}
}
更换
JSONObject bod = (JSONObject)parser.parse((String)event.get("body"));
与
如果event
始终是JSONObject
的实例(似乎是理所当然的,否则您将在JSONObject event=(JSONObject)parser.parse(reader);
)
你看到了吗
{"body":{"email":"test@test.com"}}
仅仅因为logger.log(event.toJSONString());是的,谢谢你,我有了进步。 但现在,当我以JSON格式向Postman发送数据时,他似乎收到了一个字符串化版本的尸体。我在cloudwatch日志中获得了这些数据:
"resource": "/users",
"httpMethod": "POST",
"queryStringParameters": null,
"stageVariables": null,
"body": "{\n \"id\": 5,\n \"company_id\": [\n 1\n ],\n \"email\": \"test@test.com\",\n \"employment_status\": \"FULL-TIME\",\n \"firstname\": \"Sebastien\",\n \"lastname\": \"LALALLALA\",\n \"login\": \"test@test.com\",\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
您已经有了
logger.log(event.toJSONString());
因为event
是JSONObject
。那么为什么不替换JSONObject bod=(JSONObject)parser.parse((String)event.get(“body”);
为JSONObject bod=(JSONObject)event.get(“body”)如果您的请求的结构是稳定的,那么您也可以考虑使用POJO而不是从<代码>输入流< /代码>中消费,并且使用这么多类型化,也就是说,您好,是的,我正在发送原始JSON体,内容类型被设置为Apple。ion/json
java.lang.ClassCastException: java.lang.String cannot be cast to org.json.simple.JSONObject