如何使用 RestTemplate 对 Java 中的复杂 body 的 POST 请求?
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。所以 body 应该是这样的:
{
"SomeThing":{
"Expr":"cdjhcdjh"
},
"SomeInfo":{
"Progr":"EVZpoiuyt",
"Other": "{code: \"abcd\", password:\"12345\"}"
}
}
如何为此 body 创建地图?任何反馈将不胜感激。谢谢!
您应该创建 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 中使用这个对象。
ObjectToPost obj = new ObjectToPost();
obj.setSomeThing(...)
obj.setSomeInfo(...)
restTemplate.postForEntity("url", obj , Employ.class);
您也可以使用地图,但这会使它变得相当复杂。如果你真的想用地图实现它,你应该创建一个 <String,Object>
地图,如:
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. The library can be obtained as Maven artifacts or on Github 的 Javadoc(包括源代码和 javadoc)
我在 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。所以 body 应该是这样的:
{
"SomeThing":{
"Expr":"cdjhcdjh"
},
"SomeInfo":{
"Progr":"EVZpoiuyt",
"Other": "{code: \"abcd\", password:\"12345\"}"
}
}
如何为此 body 创建地图?任何反馈将不胜感激。谢谢!
您应该创建 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 中使用这个对象。
ObjectToPost obj = new ObjectToPost();
obj.setSomeThing(...)
obj.setSomeInfo(...)
restTemplate.postForEntity("url", obj , Employ.class);
您也可以使用地图,但这会使它变得相当复杂。如果你真的想用地图实现它,你应该创建一个 <String,Object>
地图,如:
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. The library can be obtained as Maven artifacts or on Github 的 Javadoc(包括源代码和 javadoc)