Получение значений из многозначной карты

#java #spring-boot #spring-restcontroller #spring-rest

#java #весенняя загрузка #spring-restcontroller #spring-rest

Вопрос:

Я использую этот код для получения значений из HTTP-запроса:

 @PostMapping(consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, value = "/v1/notification")
  public ResponseEntity<String> handleNotifications(@RequestBody MultiValueMap<String, Object> keyValuePairs) {

    LOGGER.debug("handleFormMessage");
    LOGGER.debug("keyValuePairs: {}", keyValuePairs);

    String unique_id = String.valueOf(keyValuePairs.get("unique_id"));

    System.out.println("!!!!!!!!!!!!!! ! unique_id "   unique_id);
}
  

Но я получаю это значение : !!!!!!!!!!!!!! ! unique_id [24q376c3ts2kh3o3220rry322dfe2k7y] .

Есть ли способ удалить [] из строки без классического String result = str.substring(0, index) str.substring(index 1); ?

Есть ли способ получить значения?

Я использую это для публикации значений:

введите описание изображения здесь

Комментарии:

1. Предоставляете ли вы unique_id в виде списка при вызове этой конечной точки?

2. Нет, я отправляю его как application/x-www-form-urlencoded

Ответ №1:

Если вы всегда предоставляете только одно значение для unique_id , вы можете вместо get этого использовать getFirst which

Возвращает первое значение для данного ключа

Ваш код будет выглядеть следующим образом:

 String unique_id = String.valueOf(keyValuePairs.getFirst("unique_id"));
  

Помните, что этот метод фактически возвращает первое значение для указанного ключа или null , если оно не найдено.


В случае, если вы отправляете более одного значения, вам необходимо обработать их как коллекцию. Например:

 Collection<String> unique_ids = keyValuePairs.get("unique_id");
  

После этого вы можете делать со всеми идентификаторами по своему усмотрению, например, печатать их:

 unique_ids.stream().forEach(System.out:println);
  

Комментарии:

1. В случае, если я отправлю 2 ключа unique_id 2 раза? Что я могу сделать, чтобы предотвратить проблему с кодом?

Ответ №2:

Многозначная карта — это интерфейс, наследующий карту, и вы можете видеть полученный объект в виде списка

 public interface MultivaluedMap<K,V> extends Map<K,List<V>>
  

Затем вы можете сделать это и получить первый элемент списка:

 String unique_id = String.valueOf(keyValuePairs.getFirst("unique_id"));