[英]Post Json Array in Json Object via RestTemplate in Spring Boot
我尝试使用 RestTemplate 在 json 对象中发布数组
{
"update": {
"name": "xyz",
"id": "C2",
"Description": "aaaaaa",
"members": ["abc", "xyz"]
}
}
这是我的 PostMapping 控制器
@PostMapping(value = "/update")
public Update update(@RequestBody Update update) {
String url = "";
HttpHeaders headers = createHttpHeaders("username", "passowrd");
JSONObject jsonObject = new JSONObject();
jsonObject.put("update", update);
HttpEntity<JSONObject> request = new HttpEntity<>(jsonObject, headers);
ResponseEntity<Update> update = restTemplate.exchange(url, HttpMethod.POST,request, Update.class);
return update.getBody();
}
这是我的 POJO
public class Update {
private String name;
private String id;
private String Descripion;
private List<String> members;
}
我得到了 500
{
"timestamp": "2020-03-13T06:31:21.822+0000",
"status": 500,
"error": "Internal Server Error",
"message": "No HttpMessageConverter for org.json.JSONObject and content type \"application/json\""
}
尝试使用 Json 消息转换器配置您的 RestTemplate。
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
你可以参考这篇博文以获得详细的解释
https://www.baeldung.com/spring-httpmessageconverter-rest
然后按如下所示执行您的休息调用。您将不再需要显式创建 Json 对象。
String url = "";
HttpEntity<Update> request = new HttpEntity<>(update, headers);
ResponseEntity<Update> firewallGroupUpdate = restTemplate.exchange(url, HttpMethod.POST, request, Update.class);
return firewallGroupUpdate.getBody();
将 resttemplate.exchange 更改为 resttemplate.postForObject。 并且还更改了返回字符串的方法。
public String groupUpdate(@RequestBody String groupUpdate) {
String url = "";
HttpHeaders headers = createHeaders("username","password");
headers.setContentType(MediaType.APPLICATION_JSON);
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
HttpEntity<String> requestEntity = new HttpEntity<String>(groupUpdate, headers);
String response = restTemplate.postForObject(url,requestEntity,String.class);
return response;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.