Преобразование значения карты в строку - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь преобразовать значение карты в String. Я пробовал метод toString(), но он по-прежнему возвращает Object вместо String

response = WS.sendRequest(findTestObject('api/test/TD-4_01_01-Valid'))

Map parsed = response.getHeaderFields()

String messageId = parsed.get('x-message-id').toString();

println messageId

Фактический результат:

[C5yZC5hcy5sb2NhbC0xMjgyNi05MzE1LTE=] 

Ожидаемый результат:

C5yZC5hcy5sb2NhbC0xMjgyNi05MzE1LTE=

Ответы [ 2 ]

4 голосов
/ 16 июня 2020

Согласно API , Map является отображением Map<String, List<String>>. Поэтому вы получаете упаковку в скобки [].

Если вы хотите получить доступ к первому элементу в этом списке, вы должны вызвать parsed.get('x-message-id').get(0), чтобы получить доступ к элементу с индексом 0.

Вот полное решение:

response = WS.sendRequest(findTestObject('api/test/TD-4_01_01-Valid'))
Map parsed = response.getHeaderFields()
String messageId = parsed.get('x-message-id').get(0);
println messageId
3 голосов
/ 16 июня 2020

ResponseObject # getHeaderFields возвращает Map из String ключей к List из String объектов в качестве значений. Вам просто нужно получить List из String объектов для ключа x-message-id, и, поскольку вы ожидаете, что он вернет единственный результат, найдите любой.

ResponseObject response = WS.sendRequest(findTestObject('api/test/TD-4_01_01-Valid'));

Map<String, List<String>> parsed = response.getHeaderFields();

List<String> messageIdList = parsed.get("x-message-id");

String messageId = messageIdList.stream().findAny().orElseThrow(IllegalStateException::new);
...