繁体   English   中英

如何在 Java 中对复杂主体的 POST 请求使用 RestTemplate?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM