#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);
});