2017-10-06 7 views
0

Je le modèle suivant qui fonctionne comment je pense à:modèle Velocity parse JSON invalide comme valide JSON

#set($allParams = $input.params()) 
{ 
    "body" : $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 
    } 
} 

Ce qui est gênant pour moi est que ce modèle va analyser encore JSON non valide.

Par exemple donné JSON invalides à la suite avant la transformation:

{ 
    "example": [email protected]#$%^&*()_+ 
} 

En utilisant le modèle ci-dessus se transformer à:

{ 
    "body" : { 
     "asdasd": "[email protected]#$%^&*()" 
    }, 
    ... 
} 

Ma question est pourquoi? Ne devrait pas $input.json('$') échouer à analyser une chaîne JSON invalide?

journaux Redacted ci-dessous:

Execution log for request test-request 
Fri Oct 06 21:27:13 UTC 2017 : Starting execution for request: test-invoke-request 
Fri Oct 06 21:27:13 UTC 2017 : HTTP Method: POST, Resource Path: /equipment 
Fri Oct 06 21:27:13 UTC 2017 : Method request path: {} 
Fri Oct 06 21:27:13 UTC 2017 : Method request query string: {} 
Fri Oct 06 21:27:13 UTC 2017 : Method request headers: {} 
Fri Oct 06 21:27:13 UTC 2017 : Method request body before transformations: { 
    "asdasd": 123123$%^&*() 
} 
Fri Oct 06 21:27:13 UTC 2017 : Endpoint request body after transformations: { 
    "body" : {"asdasd":"123123$%^&*()"}, 
    "params" : { 
.... 
+0

qu'est-ce que l'entrée Object? – user7294900

+0

http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#input-variable-reference –

+1

Ensuite, le problème est avec l'API Amazon, pas avec Velocity, et vous devriez soumettre un rapport de bogue ici. –

Répondre

0

j'ai pu résoudre mon problème en utilisant un modèle de corps de la requête:

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "title": "Example", 
    "type": "object", 
    "required": [ 
     "example" 
    ], 
    "properties": { 
     "example": { 
      "type":"string" 
     } 
    } 
} 

Ainsi la passerelle API vérifiera le corps de la demande par rapport au modèle de schéma JSON ci-dessus avant l'envoyant à Lambda.