Правильный способ использования необязательного параметра в Java Azure Function - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь понять, как создавать функции Azure, используя Java с простой функцией преобразования температуры. Маршрут, который я попытался определить:

временные секретари / {метод} / {темп?}

Я изменил шаблонный код HttpTrigger, сгенерированный для нового Java-проекта:

   @FunctionName("temps")
   public HttpResponseMessage run(
        @HttpTrigger(name = "req", 
                    methods = {HttpMethod.GET}, 
                    authLevel = AuthorizationLevel.ANONYMOUS,
                    route = "temps/{method}/{temp:float?}") 
            HttpRequestMessage<Optional<String>> request,
            @BindingName("method") String method,
            @BindingName("temp") String temp,
            final ExecutionContext context) {...}

Это прекрасно работает, когда я фактически передаю значение температуры в качестве последнего параметра, но если я просто вызываю "temps / {method}", я получаю NullPointerException при


com.microsoft.azure.functions.worker.binding.BindingDataStore.getTriggerMetatDataByName(BindingDataStore.java:54). 

Так что я предполагаю, что неправильно определяю привязки, чтобы он мог правильно обрабатывать, когда последний параметр не включен в URI. Я видел ряд других сообщений об этом, которые указывают, в том числе и «?» должно работать, так что интересно, если я упускаю что-то очевидное. Примечание: у меня есть код, чтобы проверить, является ли значение, переданное в temp, значением float, так что все работает хорошо.

1 Ответ

0 голосов
/ 19 марта 2019

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

    @FunctionName("temps")
    public HttpResponseMessage run(
        @HttpTrigger(name = "req", 
                    methods = {HttpMethod.GET}, 
                    authLevel = AuthorizationLevel.ANONYMOUS,
                    route = "temps/{method}/{temp=NONE}") 
            HttpRequestMessage<Optional<String>> request,
            @BindingName("method") String method,
            @BindingName("temp") String temp,
            final ExecutionContext context) {...}

Кажется, это работает, но не объясняет, почему другие опубликованные примеры с '?' назначать необязательный параметр не следует (если только он не работает в Java, но работает в C #). Я также обнаружил, что при предоставлении значения по умолчанию вы не можете включить тип параметра, например, "{Темп **: поплавок ** = NONE}".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...