0

Я пытаюсь создать службу, которая выводит json из базы данных dynamo db. Однако после реализации шаблонов отображения объектов в амазонском шлюзе api служба только преобразует куски dynamodb json в обычный json. В журналах ошибок нет. Я прикреплен ниже шаблонов отображения тела и тела ответа для GET.AWS Gateway API не может преобразовать DynamoDb JSON в массив в обычный JSON

Body Mapping Шаблон:

#set($inputRoot = $input.path('$')) 
    #foreach($elem in $inputRoot.Items) { 
     "accession" : "$elem.accession.S", 
     "entryName" : "$elem.entryName.S", 
     "sequence" : "$elem.sequence.S", 
     "sequenceChecksum" : "$elem.sequenceChecksum.S", 
     "taxid" : "$elem.taxid.N", 
     "features" : "$elem.features.L" 
    } #if($foreach.hasNext),#end 
    #end 

Ответ:

{ 
    "accession" : "P05067", 
    "entryName" : "A4_HUMAN", 
    "sequence" : "MLPGLALLLLAAWTARALEVPTDGNAGLLAEPQIAMFCGRLNMHMNVQNGKWDSDPSGTKTCIDTKEGILQYCQEVYPELQITNVVEANQPVTIQNWCKRGRKQCKTHPHFVIPYRCLVGEFVSDALLVPDKCKFLHQERMDVCETHLHWHTVAKETCSEKSTNLHDYGMLLPCGIDKFRGVEFVCCPLAEESDNVDSADAEEDDSDVWWGGADTDYADGSEDKVVEVAEEEEVAEVEEEEADDDEDDEDGDEVEEEAEEPYEEATERTTSIATTTTTTTESVEEVVREVCSEQAETGPCRAMISRWYFDVTEGKCAPFFYGGCGGNRNNFDTEEYCMAVCGSAMSQSLLKTTQEPLARDPVKLPTTAASTPDAVDKYLETPGDENEHAHFQKAKERLEAKHRERMSQVMREWEEAERQAKNLPKADKKAVIQHFQEKVESLEQEAANERQQLVETHMARVEAMLNDRRRLALENYITALQAVPPRPRHVFNMLKKYVRAEQKDRQHTLKHFEHVRMVDPKKAAQIRSQVMTHLRVIYERMNQSLSLLYNVPAVAEEIQDEVDELLQKEQNYSDDVLANMISEPRISYGNDALMPSLTETKTTVELLPVNGEFSLDDLQPWHSFGADSVPANTENEVEPVDARPAADRGLTTRPGSGLTNIKTEEISEVKMDAEFRHDSGYEVHHQKLVFFAEDVGSNKGAIIGLMVGGVVIATVIVITLVMLKKKQYTSIHHGVVEVDAAVTPEERHLSKMQQNGYENPTYKFFEQMQN", 
    "sequenceChecksum" : "A12EE761403740F5", 
    "taxid" : "9606", 
    "features" : "[{"M":{"category":{"S":"MOLECULE_PROCESSING"},"description":{"S":" "},"type":"category":{"S":"MOLECULE_PROCESSING"},"description":{"S":"Amyloid beta A4 protein"},"type":{"S":"CHAIN"},"end":{"S":"770"},"begin":{"S":"18"}}},{"M":{"ftId":{"S":"PRO_0000000089"},"category":{"S":"MOLECULE_PROCESSING"},"description":{"S":"Soluble APP-alpha"},"type":{"S":"CHAIN"},"end":{"S":"687"},"begin":{"S":"18"}}},{"M":{"ftId":{"S":"PRO_0000000090"},"category":{"S":"MOLECULE_PROCESSING"},"description":{"S":"Soluble APP-beta"},"type":{"S":"CHAIN"},"end":{"S":"671"},"begin":{"S":"18"}}},{"M":{"ftId":{"S":"PRO_0000381966"},"category":{"S":"MOLECULE_PROCESSING"},"description":{"S":"N-APP"},"type":{"S":"CHAIN"},"end":{"S":"286"},"begin":{"S":"18"}}},{"M":{"ftId":{"S":"PRO_0000000091"},"category":{"S":"MOLECULE_PROCESSING"},"description":{"S":"C99"},"type":{"S":"CHAIN"},"end":{"S":"770"},"begin":{"S":"672"}}},{"M":{"ftId":{"S":"PRO_0000000092"},"category":{"S":"MOLECULE_PROCESSING"},"description":{"S":"Beta-amyloid protein 42"},"type":{"S":"CHAIN"},"end":{"S":"713"},"begin":{"S":"672"}}}]" 
     }   
Response Headers 
{"Content-Type":"application/json"} 
Logs 
Execution log for request test-request 
Mon Aug 08 15:26:05 UTC 2016 : Starting execution for request: test-invoke-request 
Mon Aug 08 15:26:05 UTC 2016 : HTTP Method: GET, Resource Path: /proteins/{accession} 
Mon Aug 08 15:26:05 UTC 2016 : Method request path: {accession=P05067} 
Mon Aug 08 15:26:05 UTC 2016 : Method request query string: {} 
Mon Aug 08 15:26:05 UTC 2016 : Method request headers: {} 
Mon Aug 08 15:26:05 UTC 2016 : Method request body before transformations: null 
Mon Aug 08 15:26:05 UTC 2016 : Endpoint request URI: https://dynamodb.us-west-2.amazonaws.com/?Action=Query 
Mon Aug 08 15:26:05 UTC 2016 : Endpoint request headers: {Authorization=****************************************************************************************************************************************************************************************************************************************************************************************b0b302, X-Amz-Date=20160808T152605Z, x-amzn-apigateway-api-id=9x56sueb85, Accept=application/json, User-Agent=AmazonAPIGateway_9x56sueb85, X-Amz-Security-Token=AgoGb3JpZ2luEJv//////////wEaCXVzLXdlc3QtMiKAAlXlB1cz9vo5Kf2llpupTpP1fTiHMBBbZhOmQW30/jCc5Q3RV+BM9k0LtqfJXRdRpzw5DEHg1dmlA1k8Ljha+og4RGYFdpj/9wdc4u1WKnZdy/lZFUAMey0YotNc+RniWyMq+ZiVhY94Sv/zKJ+dxSGkDZbz5A6Jbfj4EfVFuMLC3kHA4tJKWp6PCXpyHJqFqQ+UuI/q0coHNQv0euBD6hNUBOEBZes2TIQdTha8f4k+avX7o1f3LcpIjfvdPN4InOXZ7ZMHDgpLEuxurOZ7taZjoXftHxpRG2GAciTNj7gQASCsxRAQL/4gujC6yydGievEE6V5Zn5prIRnHPz0Lmcq8QII8f//////////ARAAGgw5MTUzMzI4Mzc1NDAiDD4AxveOBPRjUQ28ZirFAj5mJUN8gxUfXUQc1AzD08pLgpAtrz11K1Xgax/ATvptUj//Pcy+4fS90PqdZSqMSmS8KsD0X46m7GfhNNzuQypCdY3lyyN [TRUNCATED] 
Mon Aug 08 15:26:05 UTC 2016 : Endpoint request body after transformations: { 
    "TableName": "Protein_DB", 
    "IndexName": "accession-index", 
    "KeyConditionExpression": "accession = :v1", 
     "ExpressionAttributeValues": { 
      ":v1": { 
       "S": "P05067" 
      } 
     } 
} 
Mon Aug 08 15:26:05 UTC 2016 : Endpoint response body before transformations: {"Count":1,"Items":[{"accession":{"S":"P05067"},"features":{"L":[{"M":{"category":{"S":"MOLECULE_PROCESSING"},"description":{"S":" "},"type":{"S":"SIGNAL"},"evidences":{"L":[{"M":{"source":{"M":{"id":{"S":"12665801"},"alternativeUrl":{"S":"http://europepmc.org/abstract/MED/12665801"},"name":{"S":"PubMed"},"url":{"S":"http://www.ncbi.nlm.nih.gov/pubmed/12665801"}}},"code":{"S":"ECO:0000269"}}},{"M":{"source":{"M":{"id":{"S":"2900137"},"alternativeUrl":{"S":"http://europepmc.org/abstract/MED/2900137"},"name":{"S":"PubMed"},"url":{"S":"http://www.ncbi.nlm.nih.gov/pubmed/2900137"}}},"code":{"S":"ECO:0000269"}}},{"M":{"source":{"M":{"id":{"S":"3597385"},"alternativeUrl":{"S":"http://europepmc.org/abstract/MED/3597385"},"name":{"S":"PubMed"},"url":{"S":"http://www.ncbi.nlm.nih.gov/pubmed/3597385"}}},"code":{"S":"ECO:0000269"}}}]},"end":{"S":"17"},"begin":{"S":"1"}}},{"M":{"ftId":{"S":"PRO_0000000088"},"category":{"S":"MOLECULE_PROCESSING"},"description":{"S":"Amyloid b [TRUNCATED] 
Mon Aug 08 15:26:05 UTC 2016 : Endpoint response headers: {x-amzn-RequestId=J0J7K1RFDOGEK20V70T0HKJ14JVV4KQNSO5AEMVJF66Q9ASUAAJG, x-amz-crc32=273504943, Content-Length=75281, Date=Mon, 08 Aug 2016 15:26:05 GMT, Content-Type=application/x-amz-json-1.0} 
Mon Aug 08 15:26:05 UTC 2016 : Method response body after transformations: 
     { 
      "accession" : "P05067", 
      "entryName" : "A4_HUMAN", 
      "sequence" : "MLPGLALLLLAAWTARALEVPTDGNAGLLAEPQIAMFCGRLNMHMNVQNGKWDSDPSGTKTCIDTKEGILQYCQEVYPELQITNVVEANQPVTIQNWCKRGRKQCKTHPHFVIPYRCLVGEFVSDALLVPDKCKFLHQERMDVCETHLHWHTVAKETCSEKSTNLHDYGMLLPCGIDKFRGVEFVCCPLAEESDNVDSADAEEDDSDVWWGGADTDYADGSEDKVVEVAEEEEVAEVEEEEADDDEDDEDGDEVEEEAEEPYEEATERTTSIATTTTTTTESVEEVVREVCSEQAETGPCRAMISRWYFDVTEGKCAPFFYGGCGGNRNNFDTEEYCMAVCGSAMSQSLLKTTQEPLARDPVKLPTTAASTPDAVDKYLETPGDENEHAHFQKAKERLEAKHRERMSQVMREWEEAERQAKNLPKADKKAVIQHFQEKVESLEQEAANERQQLVETHMARVEAMLNDRRRLALENYITALQAVPPRPRHVFNMLKKYVRAEQKDRQHTLKHFEHVRMVDPKKAAQIRSQVMTHLRVIYERMNQSLSLLYNVPAVAEEIQDEVDELLQKEQNYSDDVLANMISEPRISYGNDALMPSLTETKTTVELLPVNGEFSLDDLQPWHSFGADSVPANTENEVEPVDARPAADRGLTTRPGSGLTNIKTEEISEVKMDAEFRHDSGYEVHHQKLVFFAEDVGSNKGAIIGLMVGGVVIATVIVITLVMLKKKQYTSIHHGVVEVDAAVTPEERHLSKMQQNGYENPTYKFFEQMQN", 
      "sequenceChecksum" : "A12EE761403740F5", 
      "taxid" : "9606", 
      [TRUNCATED] 
Mon Aug 08 15:26:05 UTC 2016 : Method response headers: {Content-Type=application/json} 
Mon Aug 08 15:26:05 UTC 2016 : Successfully completed execution 
Mon Aug 08 15:26:05 UTC 2016 : Method completed with status: 200 

Я пытался форматировать поле Featuers с небольшим sucess.Here моя попытка:

#set($inputRoot = $input.path('$')) 

     #foreach($elem in $inputRoot.Items) { 
      "accession" : "$elem.accession.S", 
      "entryName" : "$elem.entryName.S", 
      "sequence" : "$elem.sequence.S", 
      "sequenceChecksum" : "$elem.sequenceChecksum.S", 
      "taxid" : "$elem.taxid.N", 
      "features" : "$elem.features.L" 
     }#if($foreach.hasNext),#end 
#end 

#foreach($elem in $inputRoot.Items.features) 
     { 
     "alternativeSequence": "$elem.alternativeSequence.S", 
     "begin": "$elem.begin.S", 
     "category": "$elem.category.S", 
     "description": "$elem.description.S", 
     "end": "$elem.end.S", 
     "evidences": "$elem.evidences.L", 
     "ftID": "$elem.ftId.S", 
     "type": "$elem.type.S" 
     }#if($foreach.hasNext),#end 

#end`` 

ответ

0

Проблема заключалась в том, что $ elem является переменной, не являющейся функцией, и не может быть повторно использована в цикле foreach. Необходимо ввести новое имя переменной, например $ elem1. Я прикреплен ниже шаблона окончательного рабочего тела.

#set($inputRoot = $input.path('$')) 

    #foreach($elem in $inputRoot.Items) { 
     "accession" : "$elem.accession.S", 
     "entryName" : "$elem.entryName.S", 
     "sequence" : "$elem.sequence.S", 
     "sequenceChecksum" : "$elem.sequenceChecksum.S", 
     "taxid" : $elem.taxid.N, 
     "features" : [ 
         #foreach($elem1 in $elem.features.L){ 
          "alternativeSequence": "$elem1.M.alternativeSequence.S", 
          "begin": "$elem1.M.begin.S", 
          "category": "$elem1.M.category.S", 
          "description": "$elem1.M.description.S", 
          "end": "$elem1.M.end.S", 
          "evidences": [ 
              #foreach($elem2 in $elem1.M.evidences.L){ 
               "code":"$elem2.M.code.S", 
               "source" : #foreach($elem3 in $elem2.M.source){ 
                  "alternativeUrl" : "$elem3.alternativeUrl.S", 
                  "id":"$elem3.id.S", 
                  "name":"$elem3.name.S", 
                  "url":"$elem3.url.S", 
                 }#if($foreach.hasNext),#end 
                 #end 
              }#if($foreach.hasNext),#end 
              #end 
             ], 
          "ftID": "$elem1.M.ftId.S", 
          "type": "$elem1.M.type.S" 
         }#if($foreach.hasNext),#end 
         #end 
        ] 
    }#if($foreach.hasNext),#end 

конец
0

ли проблема поля 'features'? Я думаю, вы просто добавили цитаты, когда они не нужны.

#set($inputRoot = $input.path('$')) 
#foreach($elem in $inputRoot.Items) { 
    "accession" : "$elem.accession.S", 
    "entryName" : "$elem.entryName.S", 
    "sequence" : "$elem.sequence.S", 
    "sequenceChecksum" : "$elem.sequenceChecksum.S", 
    "taxid" : "$elem.taxid.N", 
    "features" : $elem.features.L 
} #if($foreach.hasNext),#end 
#end 
+0

Да, проблема заключается в поле функции. Это большой список и корректно отформатируется в обычном json, однако его содержимое остается в формате dynamodb json. – ndeluca18

+0

Это, по-видимому, только не минимизирует dynamodb json. – ndeluca18

+0

Итак, что именно вы думаете, должно произойти? API Gateway не знает схемы DDB-записи, поэтому вам придется делать какое-либо преобразование в довольно JSON самостоятельно, как вы это делали с другими полями. –

Смежные вопросы