spring - 如何在带有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 中的参数。- 不会抛出任何错误。
如何将参数传递给休息模板?
解决方案
您可以使用 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 中使用查询参数
推荐阅读
- vb.net - 将具有 T 属性的类与 json 转换
- javascript - 在单击 d3 js 条形图上滚动条
- java - 运行插入样本时出现问题
- angular - 在 angualr 6 中使用 sharedObject 服务的最佳方式是什么?
- dart - 在选择和自定义瓷砖高度时更改 ListTile 的背景颜色
- android - 调用 HttpUrlConnection.getResponseCode() 时 IntentService 冻结
- javascript - ESLint 警告(应该使用非回调方法) - 如何处理?
- amazon-s3 - Vagrant:来自 S3 的下载框(使用 MFA)
- c# - RetrieveEntityChangesRequest 附件
- sql - 想简化oracle sql中的REGEXP_SUBSTR()