Передача тела запроса в Spring Rest Template без использования LinkedMultiValueMap - PullRequest
0 голосов
/ 15 января 2020

Я использую Spring Rest Template, чтобы сделать запрос PUT Http, и до сих пор я передавал тело запроса, используя следующее:

        MultiValueMap<String, Object> body = new LinkedMultiValueMap<String, Object>();
        body.add("account", testAccount);

        HttpEntity<?> requestEntity = new HttpEntity<Object>(body, headers);

        ResponseEntity<String> responseEntity;

        try {
            responseEntity = rest.exchange(uri, HttpMethod.PUT, requestEntity, String.class);
        }
        catch (HttpStatusCodeException e) {
            log.error("Http PUT failed with response: " + e.getStatusText());
            return ResponseEntity.status(e.getStatusCode()).body(e.getResponseBodyAsString());
        }

        return responseEntity; 

Тело запроса, которое отправляется моей цели API выглядит как:

{"account":[{"account_id":"495"}]}

Это работает, но мой целевой API не ожидает, что объект account будет иметь массив в качестве значения, и в настоящее время выдает мне 500 Internal Server Error, поэтому мой вопрос Как я могу получить значение свойства 'account', чтобы быть объектом, а не массив? Например, я хотел бы, чтобы тело запроса выглядело как:

{"account":{"account_id":"495"}}

Есть ли другой тип Map, который можно использовать, который не принимает несколько значений?

Я все еще хотел бы если возможно, использовать метод exchange.

Любая помощь по этому вопросу была бы грандиозной! Большое спасибо

Ответы [ 2 ]

0 голосов
/ 16 января 2020

В действительности ответом было просто использование обычного HashMap вместо MultiValueMap. Как видно здесь, случай MultiValueMap используется, когда вы хотите добавить массив к одному ключу в теле запроса. Спасибо за помощь.

0 голосов
/ 15 января 2020

Вам не нужно использовать MultiValueMap. Вы можете просто использовать

HttpEntity<Account> requestEntity = new HttpEntity<>(testAccount, headers);

Проверьте https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/http/HttpEntity.html для получения дополнительной информации.

...