Java - REST webtraget queryParam с карты - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь создать WebTartget с некоторыми параметрами запроса. У меня есть метод, который имеет Map<String, ?> queryParams в качестве параметра. Внутри цикла for набора ключей карты я пытаюсь добавить параметры в WebTarget.

 WebTarget webTarget = createTarget(target);
 for (String key : queryParams.keySet()) {
     webTarget = webTarget.queryParam(key, queryParams.get(key));
 }

 return webTarget.request(MediaType.APPLICATION_JSON)
        .header(HttpHeaders.AUTHORIZATION, "Bearer ".concat(this.getKeycloakAccessToken()))
        .get(resultType);

Проблема в том, что декомпилированный файл .class выглядит так:

for (String key : queryParams.keySet()) {
    webTarget = webTarget.queryParam(key, new Object[]{queryParams.get(key)});
}

Если я оцениваю код в Intellij, мой запрос содержит это: &deviceNumbers=2&deviceNumbers=3

Но если я выполню код, мой запрос содержит это вместо: &deviceNumbers=%5BLjava.lang.String%3B%404b887c24

В этом примере массив String передается внутри карты queryParam.

1 Ответ

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

Это обходной путь, который я использовал:

private WebTarget setQueryParams(WebTarget webTarget, Map<String, Object> queryParams) {

    if (queryParams != null) {
        for (Map.Entry<String, Object> entry : queryParams.entrySet()) {
            Object value = entry.getValue();
            if (value instanceof Iterable) {
                for (Object o : ((Iterable) value)) {
                    webTarget = webTarget.queryParam(entry.getKey(), o);
                }
            } else if (value.getClass().isArray()) {
                webTarget = webTarget.queryParam(entry.getKey(), (Object[]) value);
            } else {
                webTarget = webTarget.queryParam(entry.getKey(), value);
            }
        }
    }

    return webTarget;
}

Проблема заключалась в том, что компилятор создал Object[], который содержал мой String[].Теперь я просто приведу свой массив к Object[], чтобы эта проблема больше не возникала.Для всех классов, которые реализуют Iterable, например List или Set, я вручную добавляю параметр запроса так часто, как это необходимо.

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