Я работал над функциями Azure использование Azure Event Hubs срабатывает, и появляется эта ошибка:
Result: Failure Exception: IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $ Stack: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $ at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:226) at com.google.gson.Gson.fromJson(Gson.java:927) at com.google.gson.Gson.fromJson(Gson.java:892) at com.google.gson.Gson.fromJson(Gson.java:841) .... //omitted for brevity
Что может пойти не так?
TL;DR Пожалуйста, не забывайте использовать правильную мощность при использовании триггера EventHubs с функциями Azure , и если вы это сделаете, надеюсь, вы наткнетесь на этот пост в блоге если вы Погуглите это в Bing!
😉
(немного) более длинная версия…
Эта ошибка была для меня новой. При дальнейшем самоанализе я понял, что проблема была связана с тем, что платформа Azure Functions не могла вызвать сам метод функции (т.Е. Это не имело ничего общего с самой логикой функции).
Кстати, существует множество функций, упрощающих устранение неполадок в функциях Azure
- Встроенный мониторинг и Анализ журнала
- Диагностика
- Удаленная отладка с использованием VS Code
Функции Azure используют библиотеку gson
для сериализации/десериализации полезных нагрузок
Вот фрагмент метода:
@FunctionName("processData") public void process( @EventHubTrigger(name = "event", eventHubName = "", connection = "EventHubConnectionString") Data data, final ExecutionContext context) { //implementation }
В этом случае не удалось преобразовать полезную нагрузку EventHubs в Data
POJO, который ожидал метод.
Я заглянул в Azure Functions Java API docs , чтобы подтвердить, правильно ли я использовал @EventHubTrigger
. И я наткнулся на свойство мощность
Вот определение:
Мощность входного сигнала триггера. Выберите “Один”, если ввод представляет собой одно сообщение, или “Много”, если ввод представляет собой массив сообщений. ‘ Many’ – значение по умолчанию, если не указано .. и его значение по умолчанию равно Мощности. много
Момент ага! Теперь было не так уж сложно разобраться в сообщении об ошибке Ожидаемый BEGIN_OBJECT, но был BEGIN_ARRAY
– из-за Мощности
платформа пыталась сериализовать список/массив данных
POJOS, но метод ожидал только один. Включая мощность
явно ( Мощность. ОДИН
) был решением т.е.
@EventHubTrigger( name = "event", eventHubName = "", connection = "EventHubConnectionString", cardinality = Cardinality.ONE)
Другой способ – изменить подпись на accept List
и выбрать первый элемент в списке, например data.get(0)
На данный момент это все. Если вы нашли это полезным, покажите несколько ❤️ и следите за обновлениями, чтобы узнать больше 🙌 !
Оригинал: “https://dev.to/azure/azure-functions-tip-making-sense-of-gson-jsonsyntaxexception-5355”