Почему мой язык шаблонов Velocity не работает? - PullRequest
0 голосов
/ 25 февраля 2020

Я создаю шаблон ответа для конечной точки шлюза API AWS для обработки ошибок. Входящее сообщение об ошибке JSON выглядит следующим образом:

{
    "__type": "UserNotFoundException",
    "message": "User does not exist."
}

{
    "__type": "NotAuthorizedException",
    "message": "Incorrect username or password."
}

{
    "__type": "NotAuthorizedException",
    "message": "Password attempts exceeded"
}

Мой шаблон сопоставления VTL выглядит следующим образом:

#set($inputRoot = $input.path('$'))
#set($unf = "UserNotFoundException")
#set($nae = "NotAuthorizedException")
#set($type =$input.json('$.__type'))

#if($type == $unf)
{
  "__type": "UserNotFoundException",
  "message": $input.json('$.message'),
  "referenceCode": "UNF0000"
}
#elseif($type == $nae)
{
  "__type": "NotAuthorizedException",
  "message": $input.json('$.message'),
  "referenceCode": "NAE0000"
}
#else
{
  "__type": $input.json('$.__type'),
  "message": $input.json('$.message'),
  "referenceCode": "FAIL0000"
}
#end

Независимо от того, какой ввод я использую, чтобы вызвать ошибку 400 ответ, это проваливается в мой случай все остальное. Тип __type, который выводится в моем случае else, соответствует одному из других условных выражений, поэтому я запутался, почему они его не улавливают. Любая помощь будет оценена! (Я новичок в AWS и VTL)

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Сравните строки с equals (постоянная / не обнуляемая слева), так же, как в Java

 #if($unf.equals($type))
0 голосов
/ 25 февраля 2020

Дальнейшее устранение неполадок показало, что VTL обрабатывает мою постоянную строковую переменную как строку без кавычек, а объект JSON, который я извлекал из сообщения об ошибке, преобразовывался в строку с кавычками. Таким образом, мои условные выражения на самом деле делали это:

#if(UserNotFoundException == "UserNotFoundException")

Итак, я изменил то, как я настраивал свои константы, так:

#set($unf  = '"UserNotFoundException"')
#set($nae  = '"NotAuthorizedException"')

И теперь сравнение работает, как и ожидалось. Не уверен, что это лучший способ решить проблему, но он помогает мне преодолеть эту проблему.

...