2017-10-11 29 views
0

我試圖使用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"); 
      } 
     } 
+0

您已經有了'logger.log(event.toJSONString());'爲'event'是'JSONObject' 。 (JSONObject)parser.parse((String)event.get(「body」));' with 'JSONObject bod =(JSONObject)event.get(「body」);}爲什麼不更換'JSONObject bod = ' –

回答

1

更換

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());

+0

是的,謝謝你我有進步。 –

0

是感謝你,我有進步。 但現在它看起來像當我發送與郵差的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 
+1

你是從郵差發送一個原始的json主體嗎?你設置了一個'contentType'頭文件嗎? 如果請求的結構是穩定的,你也可以考慮使用一個POJO,而不是從'InputStream'中使用並使用如此多的類型轉換,即參見http://docs.aws.amazon.com/lambda/latest/dg /java-handler-io-type-pojo.html –

+0

你好,是的,我發送原始json正文和內容類型設置爲應用程序/ json –

相關問題