Шаблон ответа в API-шлюзе не возвращает JSON в улучшенном формате - PullRequest
0 голосов
/ 27 февраля 2019

Я добавил шаблон ответа интеграции в API-шлюз, т.е. ответ от эластичной поисковой системы, и я пытаюсь проанализировать этот ответ, чтобы удалить дополнительные данные метаданных, такие как хиты и т. Д.

#set($esOutput = $input.path('$.hits.hits'))
#set($orders = [])
#foreach( $esOrder in $esOutput )
 #set($order = $esOrder['_source'])
 #set($response = $orders.add($order) )
#end
$orders

проблема, с которой я сталкиваюсь,ответ, который извлекается из шаблона ответа, имеет следующий порядок:

[{user = kimchy, post_date = 2009-11-15T14: 12: 12, message = попробовать Elasticsearch}]

но я бы хотел, чтобы он был в правильном формате json. Что нужно исправить здесь.

это то, что я получаю из упругого поиска:

 {
  "took" : 1,
  "hits" : {
    "hits" : [
      {
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "user" : "kimchy",
          "post_date" : "2009-11-15T14:12:12",
          "message" : "trying out Elasticsearch"
        }
      }
    ]
  }
}

1 Ответ

0 голосов
/ 28 февраля 2019

Вот как я решил эту проблему, написав код VTL в шаблоне отображения ответов интеграции шлюза API:

#set($esOutput = $input.path('$.hits.hits'))
#set($one=1)
#set($length= $esOutput.size()-$one)
[
#foreach( $esOrder in $esOutput )
 #set( $order = "$.hits.hits["+$foreach.index+"]._source" )
 #set($dispatchOrder =$input.json($order))
 $dispatchOrder
  #if( $foreach.index<$length )
  ,
 #end
#end
]
...