2017-08-05 3 views
-1

I eine AWS API hava die an AWS-LAMBDA geschrieben in JAVA.in API-Gateway innerhalb des Integrationsantwort verbunden ist gebe ich einige json Zeichenfolge aus Kontextvariable und wie untenAWS API-Gateway und LAMBDA Funktion

#set($inputRoot = $input.path('$')) 
{ 
    "UserID":"$context.authorizer.claims.sub", 
    "Identity":"$context.identity.cognitoIdentityId", 
    "Account ID":"$context.identity.accountId", 
    "UserID2":"$context.authorizer.claims.email" 
} 

aber in meiner Lambda-Funktion versuche ich, diese Werte wie unten zu lesen.

context.getLogger().log("Input or Query String"+ input); 

das Problem es liest vollständigen Text, aber nicht in JSON Format.Es gibt mir ein Format wie unten.

Input or Query String{UserID=379fa501-0028-XXXX-a1c2-f0c54691b4d3, Identity=XX, Account ID=XX, [email protected]} 

Wie kann ich dies in json Format konvertieren ..?

Antwort

1

Die JSON übergeben in die Java-Lambda-Funktion von AWS wird Map<String, Object> eine Karte des Typs sein. Die Logger-Klasse serialisiert das eingehende Objekt in eine Zeichenfolge. Wenn Sie also die Eingabe in einem Protokoll betrachten, sieht es wie eine JSON-Zeichenfolge aus, auch wenn dies nicht der Fall ist.

Try this:

public class LambdaFunctionHandler implements RequestHandler<Object, Object>{ 

    @Override 
    public Object handleRequest(Object input, Context context) { 
     Map<String, Object> mappedInput = (Map<String, Object>)input; 
     context.getLogger().log("User ID: " + mappedInput.get("UserID")); 
    } 

Sie wollen natürlich mehr Typprüfung verwenden, als ich hier aufgenommen haben.

+0

Vielen Dank sir.It's Amazing Menschen helfen Menschen, die nie gesehen haben. Es funktioniert genau so. What, wenn ich json Objekt wie {"Person": {"Name": "xxxx", Alter: "xx"}} –

+0

Jedes eingehende JSON-Objekt wird als Map übergeben. In diesem Fall enthält die Eingabe-Map ein Objekt mit dem Schlüssel "Person". Dieses Objekt wird wiederum eine Map mit einem Schlüssel "Name" und einem Schlüssel "Age" sein. –