4

Я работаю с поставщиком данных для моего проекта, который, к сожалению, не придерживается каких-либо стандартов, поэтому в заголовке запроса не указан тип содержимого. На самом деле это указано, но с другим ключом, а затем содержимым.Default Content-Type для шаблона сопоставления

Полезная нагрузка запроса POST находится в формате xml, поэтому, насколько я понимаю, нам нужно использовать шаблон сопоставления для переноса полезной нагрузки в объект json. Все это отлично работает, когда мы указываем тип контента как один из установленных типов в разделе «Запрос на интеграцию».

Теперь, насколько я понимаю, если тип содержимого не указан в заголовке запроса, он должен по умолчанию использовать «application/json» и использовать шаблон сопоставления с этим типом. В нашем случае это ведет себя так же, как игнорирует шаблон сопоставления, который, в свою очередь, приводит к следующей ошибке:

{"Тип": "Пользователь", "сообщение": "Не удалось разобрать тело запроса в json."}

Только упоминание, запрос отправляется для обработки на AWS Lambda.

Любые идеи, как мы можем добиться этой работы?

Редактировать: Я подтвердил, что по умолчанию используется «application/json», если Content-Type не задан в заголовке. В этом случае я предполагаю, что я испытываю ошибку.

+0

Если тип содержимого по умолчанию - приложение/json, не следует ли, что шлюз * ожидает * JSON и отклоняет запрос, потому что это не то, что полезная нагрузка? –

+1

Да и нет. Это не влияет на отображение шаблона сопоставления или нет, он просто указывает, какой из них следует вызывать. Необходимо хотя бы вызвать шаблон отображения. Если я явно устанавливаю Content-Type в application/json, вызывается шаблон отображения, а содержимое xml красиво выбривается в объект JSON, и все это хорошо. Проблема в том, что когда этот тип содержимого отсутствует, по умолчанию не вызывается, который должен быть applicaiton/json. Представитель AWS на своем форуме уже подтвердил, что следует назвать дефолт. Похоже, это может быть ошибка в AWS. – LemonMooseTom

+0

По умолчанию 'Content-Type' может быть' '* ''. – kixorz

ответ

0

Если вы не полагаться слишком сильно на шаблоне отображения, вы всегда можете использовать лямбда-прокси ИНТЕГРАЦИЯ вместо: http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-lambda.html

Фактически это переносит ответственность за разбор тела обратно на лямбда-функции. Ваш объект event теперь будет содержать строку body, поэтому независимо от заголовков api-gw просто передаст тело вашей функции для работы. Это позволит вам анализировать тело как XML, даже если заголовок типа содержимого отсутствует/недействителен.

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