Как передать параметры запроса в шаблонную запись в пост-запросе с xml-body? - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь написать интеграционные тесты для контроллеров Spring-приложений.

Итак, этот контроллер может получать пост-запрос с xml в теле и с параметрами в URL.

Я пытался использоватьrestTemplate выглядит так:

HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_XML);
        MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
        params.add("city", "London");
        params.add("street", "backer");
        params.add("house", "1");
        HttpEntity entity = new HttpEntity<>(user, headers);

        ResponseEntity responseEntity = restTemplate.postForEntity(
                String.format("%s/user", getServerAddress()),
                entity,
                Object.class,
                params
        );

Итак, пользователь - xml сопоставляется в объекте.

В этом случае появляется сообщение об ошибке - 400 null с сервера.

Но если яудалить параметры из параметров restTemplate и мои параметры в URL после "?"- не будет выдано никаких ошибок.

Как передать параметры в остальные шаблоны?

1 Ответ

0 голосов
/ 24 октября 2018

Вы можете написать строковое представление вашего XML, используя jaxb, и отправить строку как тело запроса.Я считаю, что у вас есть объектное представление вашего тела запроса yourCusomObject Используя jaxbMarshaller, вы можете преобразовать свой объект в xml и в строку.

StringWriter sw = new StringWriter();
jaxbMarshaller.marshal(yourCusomObject, sw);
String objectAsXmlString = sw.toString();

HttpEntity<String> entity = new HttpEntity<>(objectAsXmlString, headers);
ResponseEntity<String> response = restTemplate.postForEntity("/url", entity, String.class);

ОП также хочет знать, какпередать параметры запроса

http://MyHost:PORT/employee/{employee_id}

Учтите, что это мой URL-адрес с переменной пути employee_id, и мне также нужно добавить параметр запроса (?firstName=Abc&lastName=Pqr) вurl

Вот как вы должны это сделать.Код дает экземпляр URI, который можно использовать в restTemplate.

       String url = "http://MyHost:PORT/employee/{employee_id}";

        Map<String, String> uriParams = new HashMap<String, String>();
        uriParams.put("employee_id", "1231231");

        UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(url)
                // Add query parameter
                .queryParam("firstName", "Abc")
                .queryParam("lastName", "Pqr");

        URI urlWithParameters = builder.buildAndExpand(uriParams).toUri();

Однако избегайте использования параметров запроса с POST

...