【问题标题】:Post Json Array in Json Object via RestTemplate in Spring Boot在 Spring Boot 中通过 RestTemplate 在 Json 对象中发布 Json 数组
【发布时间】:2020-06-25 04:55:36
【问题描述】:

我正在尝试使用 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\""
}

【问题讨论】:

  • 能否请您添加构建RestTemplate 实例的代码?
  • @Bean public RestTemplate getRestTemp() { return new RestTemplate(); }
  • @POOJA -- 你能把你评论中的信息放到问题中吗?谢谢。

标签: java json spring-boot post resttemplate


【解决方案1】:

尝试使用 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();

【讨论】:

  • 所以在进行此更改之前您会收到 500 错误,在进行此更改后您会收到 400 错误?
  • 是的,现在我得到了 400
【解决方案2】:

将 resttemplate.exchange 更改为 resttemplate.postForObject。 并且还改变了返回String的方法。

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;
    }

【讨论】:

    猜你喜欢
    • 2019-06-20
    • 2023-02-24
    • 2019-10-09
    • 2019-03-01
    • 2016-06-21
    • 2018-11-11
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多