2017-08-05 148 views
-1

我哈瓦其被连接到AWS-LAMBDA写入JAVA.in API网关集成响应的内部我通过从上下文变量一些JSON字符串和 像下面AWS API网关和LAMBDA功能

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

但在我的lambda函数中,我尝试读取这些值如下。

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

它读取的是完整的文本,但不是json格式的问题,它给了我一个像下面的格式。

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

如何将其转换为json格式..?

回答

1

AWS传递给Java Lambda函数的JSON将是Map<String, Object>类型的Map。记录器类将传入对象序列化为一个字符串,因此,当您查看日志中的输入时,它看起来像是一个json字符串,即使它不是。

试试这个:

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")); 
    } 

你会明显地要使用比我在这里包含更多的类型检查。

+0

谢谢先生。它是惊人的人帮助那些从未见过的人。它的工作原理与此类似。如果我有像{{Person}:{“Name”:“xxxx”,年龄:“xx”}}的json对象, –

+0

每个传入的JSON对象都以Map的形式传入,因此在您的情况下,输入映射将包含一个带有“Person”键的对象。该对象反过来将是一个带有“名称”键和“年龄”键的地图。 –