1

우편 배달부에서 요청 본문에 양식 데이터를 보내고 있습니다. 를 제외하고, 내 람다 함수의 모든에 대한 요청을 얻고 그러나API 게이트웨이 매핑 템플릿 : 양식 데이터 (POST) 요청을 JSON으로 변환

#set($allParams = $input.params()) 
{ 
"body-json" : $input.json('$'), 
"params" : { 
#foreach($type in $allParams.keySet()) 
    #set($params = $allParams.get($type)) 
"$type" : { 
    #foreach($paramName in $params.keySet()) 
    "$paramName" : "$util.escapeJavaScript($params.get($paramName))" 
     #if($foreach.hasNext),#end 
    #end 
} 
    #if($foreach.hasNext),#end 
#end 
}, 
"stage-variables" : { 
#foreach($key in $stageVariables.keySet()) 
"$key" : "$util.escapeJavaScript($stageVariables.get($key))" 
    #if($foreach.hasNext),#end 
#end 
}, 
"context" : { 
    "account-id" : "$context.identity.accountId", 
    "api-id" : "$context.apiId", 
    "api-key" : "$context.identity.apiKey", 
    "authorizer-principal-id" : "$context.authorizer.principalId", 
    "caller" : "$context.identity.caller", 
    "cognito-authentication-provider" : "$context.identity.cognitoAuthenticationProvider", 
    "cognito-authentication-type" : "$context.identity.cognitoAuthenticationType", 
    "cognito-identity-id" : "$context.identity.cognitoIdentityId", 
    "cognito-identity-pool-id" : "$context.identity.cognitoIdentityPoolId", 
    "http-method" : "$context.httpMethod", 
    "stage" : "$context.stage", 
    "source-ip" : "$context.identity.sourceIp", 
    "user" : "$context.identity.user", 
    "user-agent" : "$context.identity.userAgent", 
    "user-arn" : "$context.identity.userArn", 
    "request-id" : "$context.requestId", 
    "resource-id" : "$context.resourceId", 
    "resource-path" : "$context.resourcePath" 
    } 
} 

을 제대로 JSON에 매핑됩니다 : AWS API 게이트웨이에서 나는 다음은 "다중/폼 데이터"및 매핑 템플릿과 같은 내용 유형을 설정 한 내 요청 본문. 요청 본문이 String으로오고 있습니다. 되어 다음 전체 요청 :

  1. 내가 API 게이트웨이 매핑 템플릿 자체 JSON 개체에 요청 본문을 변환 할 수있는 방법이 있나요 (수단 대신 :

    { 
        "context": { 
         "authorizer-principal-id": "", 
         "cognito-authentication-type": "", 
         "cognito-identity-id": "", 
         "resource-path": "/env/Response", 
         "account-id": "", 
         "cognito-identity-pool-id": "", 
         "request-id": "cd2052-11e7-92b6-e3c7d7dgh01", 
         "api-id": "39dhjsr8", 
         "resource-id": "skdsk5", 
         "user-arn": "", 
         "caller": "", 
         "http-method": "POST", 
         "cognito-authentication-provider": "", 
         "api-key": "", 
         "user": "", 
        }, 
        "body-json": "------WebKitFormBoundaryLAn6jCAA10bF7ZMx\r\nContent-Disposition: form-data; name=\"sig\"\r\n\r\nmcHeelgDQcYnjh5L2L92H8KLLE=\r\n------WebKitFormBoundaryLAn6jCAA10bF7ZMx\r\nContent-Disposition: form-data; name=\"resultdescription\"\r\n\r\ncancelled.\r\n------WebKitFormBoundaryLAn6jCAA10bF7ZMx\r\nContent-Disposition: form-data; name=\"result\"\r\n\r\nF\r\n------WebKitFormBoundaryLAn6jCAA10bF7ZMx\r\nContent-Disposition: form-data; name=\"errorcode\"\r\n\r\n101\r\n------WebKitFormBoundaryLAn6jCAA10bF7ZMx\r\nContent-Disposition: form-data; name=\"id\"\r\n\r\n420LU2UEG\r\n------WebKitFormBoundaryLAn6jCAA10bF7ZMx\r\nContent-Disposition: form-data; name=\"key\"\r\n\r\ntdx\r\n------WebKitFormBoundaryLAn6jCAA10bF7ZMx\r\nContent-Disposition: form-data; name=\"refid\"\r\n\r\n10480\r\n------WebKitFormBoundaryLAn6jCAA10bF7ZMx\r\nContent-Disposition: form-data; name=\"name\"\r\n\r\nTest\r\n------WebKitFormBoundaryLAn6jCAA10bF7ZMx\r\nContent-Disposition: form-data; name=\"date\"\r\n\r\n2016-02-28T20:05:05.6330000Z\r\n------WebKitFormBoundaryLAn6jCAA10bF7ZMx\r\nContent-Disposition: form-data; name=\"timestamp\"\r\n\r\n2016-02-29T04:15:47.4797Z\r\n------WebKitFormBoundaryLAn6jCAA10bF7ZMx--", 
        "params": { 
         "path": {}, 
         "querystring": {}, 
         "header": { 
          }, 
        "stage-variables": {} 
    } 
    

    나는이에 대한이 개 질문이? String, Request Body는 JSON Object로 제공됩니다.)

  2. 또는 요청 본문 문자열을 JSON 개체로 변환해야합니다. 내 Java 코드에서 람다 처리기에 있습니까?

AWS를 처음 접했을 때 도움이 될 것입니다.

+1

이것이 API 게이트웨이 매핑 템플릿을 피하려고하는 이유 중 하나입니다. Lamda-Proxy 통합을 사용하는 것이 훨씬 쉽습니다. – dashmug

+0

아마도 도움이 될 수 있습니다. https://stackoverflow.com/questions/41756190/api-gateway-post-multipart-form-data/41770688#41770688 – dashmug

+0

고마워요.하지만이 글은 이전에 읽었고 어떤 해결책도 얻지 못했습니다. 이. –

답변

0

신체 매핑 템플릿에 $ util.parseJson()을 사용할 수 있습니다. "문자열로 된"JSON을 취해 결과의 객체 표현을 반환합니다. 당신은 문서 here

+1

하지만 그는 JSON을 엄격하게 처리하지 않았습니까? 위의 그의 질문을보십시오. – dashmug

2

당신이 application/json로 페이로드를 보내는 경우 그것은 가장 좋은 것입니다에게 읽어 보시기 바랍니다 페이로드

의 요소에 액세스하고 조작이 함수에서 결과를 사용할 수 있습니다. 그렇게하면 $util.parseJson()을 사용하여 매핑 템플릿에서 구문 분석 할 수 있으며 요청 본문이 개체로 나옵니다.

양식 데이터를 사용하려면 핸들러에서 변환해야합니다.

Node.js에서 나는 querystring 모듈을 사용합니다. 자바에서 무엇을 사용할 수 있는지 잘 모릅니다.

+0

클라이언트의 요구 사항이 form-data이므로 페이로드를 application/json으로 보낼 수 없습니다. 그러나 지금은 핸들러에서 요청 문자열을 구문 분석 할 다른 솔루션을 찾고 있습니다. –

+0

@PallaviKaushik 당신은 이것을 똑똑히보고 있습니까? "body": "$ util.escapeJavaScript ($ input.json ('$'))" –