Как добавить элементы списка в строковый URL-адрес в качестве параметров запроса?

#java

#java

Вопрос:

У меня есть таблица, которая содержит некоторое значение, и я использую хэш-карту для обеспечения сопоставления значений ключей:

 |type|uri             |client |
|----|----------------|-------|
|    |https://test.com|test   |
|aspx                 |test   |
|aspx|https://test.com|       |
 

Что я хотел бы сделать, так это создать URL-адрес на основе предоставленных значений. Итак, в основном ниже я проверяю, не являются ли какие-либо значения пустыми, чтобы добавить их в список массива следующим образом.

 private static final String CLIENT = "client";
private static final String URI = "uri";
private static final String TYPE = "type";

public void GetAuthorizeMissingRequiredFields(final Table table) {

    final String url = “/test/platform/auth”;

    final List<TableRow> rows = table.getTableRows();
    final Map<String, String> headers = getCurrentHeaders().getMap();
    ArrayList<String> queryParamsList = new ArrayList<>();

    rows.forEach(row -> {

                final String clientValue = row.getCell("client");
                final String uriValue = row.getCell("uri");
                final String typeValue = row.getCell("type");

                if (!clientValue.isEmpty()) {
                    queryParamsList.add(CLIENT   clientValue);
                }

                if (!uriValue.isEmpty()) {
                    queryParamsList.add(URI   uriValue);
                }

                if (!typeValue.isEmpty()) {
                    queryParamsList.add(TYPE   typeValue);
                }

            });

}
 

Теперь вот мой вопрос. Как вы можете видеть выше, у меня есть строка url. Что я хочу сделать, это добавить каждый элемент из списка массива в качестве пункта запроса. Итак, на основе таблицы URL-адрес должен выглядеть так:

Сценарий 1:

 /test/platform/auth?uri=https://test.comamp;client=test
 

Сценарий 2:

 /test/platform/auth?type=aspxamp;client=test
 

Сценарий 3:

 /test/platform/auth?type=aspxamp;uri=https://test.com
 

Мой вопрос в том, как сделать это добавление элементов списка в строку в качестве параметров запроса.

Ответ №1:

Теперь проблема, которую я вижу, заключается в том, что вы добавляете в список: вы добавляете, например CLIENT clientValue , (что приводит к «clienttest»), но, на мой взгляд, было бы лучше CLIENT "=" clientValue (что приводит к «client = test»).).

Вторая проблема заключается в том, что вы добавляете содержимое всех строк карты ArrayList в эту форму. Таким образом, ваш список может легко содержать несколько клиентов, URI и типов, если в вашей таблице более одной строки.

Теперь вы либо пропускаете, либо игнорируете это в своих примерах специально. Поскольку я не знаю вашей точной цели, я могу предложить вам следующее, чтобы добавить содержимое целого ArrayList в его текущем виде:

url = "?" String.join("amp;", queryParamsList);

или, в качестве альтернативы,

url = "?" queryParamsList.stream().collect(Collectors.joining("amp;"));

Если вы хотите создать отдельную строку URL-адреса для каждой строки, вам понадобится список строк URL-адресов:

 final String URL_CORE = “/test/platform/auth”;
List<String> urls = new ArrayList<>();
rows.forEach(row -> {
    final String clientValue = row.getCell("client");
    final String uriValue = row.getCell("uri");
    final String typeValue = row.getCell("type");
    
    urls.add(URL_CORE   "?"   
        (clientValue.isEmpty ? "" : CLIENT   "="   clientValue   "amp;")  
        (uriValue.isEmpty    ? "" : URI      "="   uriValue      "amp;")  
        (typeValue.isEmpty   ? "" : TYPE     "="   typeValue);
});