[英]How to use RestTemplate for a POST request for a complex body in Java?
我在 Spring 引导项目中使用 RestTemplate,我尝试调用 POST。 我正在使用这段代码:
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
MultiValueMap<String, String> map= new LinkedMultiValueMap<String, String>();
map.add("email", "abc@email.com");
map.add("id", "1234567");
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers);
ResponseEntity<Employ> response = restTemplate.postForEntity(
"url", request , Employ.class );
现在我想使用 RestTemplate 来处理一个 POST 请求,但是对于一个复杂的 object。所以正文应该是这样的:
{
"SomeThing":{
"Expr":"cdjhcdjh"
},
"SomeInfo":{
"Progr":"EVZpoiuyt",
"Other": "{code: \"abcd\", password:\"12345\"}"
}
}
如何为这个主体创建 Map? 任何反馈将不胜感激。 谢谢!
您应该创建 Java 对象 (POJO),表示您希望通过RestTemplate
发送的数据。
例如:
public class ObjectToPost {
private SomeThing someThing;
private SomeInfo someInfo;
// getters & setters
}
public class SomeThing {
private String expr;
// getters & setters
}
public class SomeInfo {
private String progr;
private String other;
// getters & setters
}
然后你可以在你的 RestTemplate 中使用这个 object。
ObjectToPost obj = new ObjectToPost();
obj.setSomeThing(...)
obj.setSomeInfo(...)
restTemplate.postForEntity("url", obj , Employ.class);
您也可以使用 Map 但这会使它变得非常复杂。 如果你真的想用 Map 来实现它,你应该创建一个<String,Object>
map 像:
MultiValueMap<String, Object> map= new LinkedMultiValueMap<String, Object>();
MultiValueMap<String, MultiValueMap<String, Object>> somethingMap = new LinkedMultiValueMap<String, Object>();
something.put("SomeThing", Map.of("Expr","cdjhcdjh");
map.put(somethingMap);
我的建议是使用其他一些 Http 客户端而不是RestTemplate
。 因此,如果您必须使用RestTemplate
,则此答案不相关。 我写了自己的 Http 客户端,虽然它的功能可能有限,但它的主要优点是简单。 您的代码可能如下所示:
HttpClient client = new HttpClient();
String response = client.sendHttpRequest("www.myurl.com", HttpClient.HttpMethod.POST, "{\"yourJson\":\"here\"");
这是HttpClient class 的 Javadoc。该库可以作为Maven 工件或在Github上获得(包括源代码和 javadoc)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.