gpt4 book ai didi

java - 在 Spring Boot 中通过 RestTemplate 发布 JSON 对象

转载 作者:行者123 更新时间:2023-11-30 10:07:18 25 4
gpt4 key购买 nike

我正在尝试将 JSON 对象发布到接受以下格式数据的 API 端点

{
"names": [
"name1",
"name2",
"name3"
]
}

我的post方法如下

public String post(List<String> names) {

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);

JSONObject jsonObject = new JSONObject();
jsonObject .put("names", names);

HttpEntity<JSONObject> entity = new HttpEntity<>(jsonObject , headers);

return restTemplate.postForObject(Constants.URL, entity, String.class);
}

当我调用 post 方法时出现此错误

org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request

我打印了 jsonObject 并尝试通过 Postman 发布它,它成功了。

我在这里缺少的重点是什么?

如有任何帮助,我们将不胜感激。

最佳答案

在您的情况下,通过 RestTemplate 直接发布 JsonObject 不起作用的原因是 RestTemplate 使用的是 Jackson Serializer - 而不是 toString 方法。 Serializer 将获取类的内部结构并将其转换为 json 表示形式,其中 toString() 方法为您提供您期望的 json 数据。

在您的情况下,序列化时的内部表示将如下所示:

"names":{"chars":"namesstring","string":"namesstring","valueType":"STRING"}

这不是您期望的结构,但它在一定程度上是 JsonObject 在内部存储您的 json 结构的方式。 (捕获类型信息等)。

但是,当您调用 toString() 时,JsonObject 会为您提供您所期望的(即没有所有元数据的 json 表示)。

所以简而言之,您认为发送的内容与实际发送的内容是不同的。您遇到的 400 错误可能是因为您调用的端点拒绝了数据的实际格式。

您可以通过使用拦截器调试 RestTemplate 进行的实际调用来亲眼看到这一点。或者,让您的客户端调用回显服务来查看有效负载。

关于java - 在 Spring Boot 中通过 RestTemplate 发布 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54383950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com