首页 > 解决方案 > 如何在带有xml的post请求中将请求参数传递给resttemplate - 正文?

问题描述

我尝试为 spring-application 控制器编写集成测试。

因此,该控制器可以接收正文中带有 xml 和 url 中带有参数的 post 请求。

我尝试像这样使用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 中的参数。- 不会抛出任何错误。

如何将参数传递给休息模板?

标签: springresttemplate

解决方案


您可以使用 jaxb 编写 XML 的字符串表示形式,并将字符串作为请求正文发送。我认为你有你的请求主体的对象表示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);

OP也想知道如何传递查询参数

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

考虑这是我的 url,它有一个路径变量employee_id,我还需要将查询参数 ( ?firstName=Abc&lastName=Pqr) 添加到 url

这是你应该怎么做的。代码给出了一个可以在 restTemplate 中使用的 URI 实例。

       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 中使用查询参数


推荐阅读