gpt4 book ai didi

java - 使用 spring 中的 Rest 模板通过 post 调用发送 json 数据

转载 作者:行者123 更新时间:2023-12-01 13:11:12 24 4
gpt4 key购买 nike

我不断收到错误消息,指出这不是有效的 json 数据,并不断收到错误 400。我认为我的实现没有正确格式化数据。目标:尝试通过传入 JSON 数据作为正文,使用 REST 模板进行后期调用。看来从map转换为json数据时,没有正确转换为json。

public void GetJsonData(String name, String city) {
Map<String, String> map = new HashMap<String, String>();
map.put("api_key", apikey);



map.put("venue_queries", "[{'name':'"+name+"', 'location': {'locality': '"+city+"'}}]");

try {
String resp = GlobalHelper.calltestService(RestServicesUrl, map);
System.out.println(resp);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


public String calltestService(String url, Map<String, String> data) throws Exception {
RestTemplate rest = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
ResponseEntity<String> response = new ResponseEntity<String>(headers, HttpStatus.OK);
rest.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
Gson gson = new Gson();
System.out.println(gson.toJson(data));
try {
response = rest.postForEntity(url, gson.toJson(data), String.class);
System.out.println(response.getBody());
System.out.println(response.getHeaders());
return response.getBody();
} catch (Exception e) {
e.printStackTrace();
System.out.println("error in post entity");
return "error";
}
}

最佳答案

正确,您生成的 JSON 无效

{
"venue_queries": "[{\u0027name\u0027:\u0027yo\u0027, \u0027location\u0027: {\u0027locality\u0027: \u0027Solares\u0027}}]",
"api_key": "asfasdfasfdasdfasdfa"
}

您的 JSON 无效,因为 GSON 默认转义 HTML 字符并将单引号作为等效的 unicode 字符代码 U+0027

如果禁用 Gson HTMLEscaping

GsonBuilder builder = new GsonBuilder();
builder.disableHtmlEscaping();
Gson gson = builder.create();

你会得到

{
"venue_queries": "[{'name':'yo', 'location': {'locality': 'Solares'}}]",
"api_key": "asfasdfasfdasdfasdfa"
}

无论如何,您的 JSON 仍然不正确。

您必须使用双引号修复 map 中的venue_queries关键内容使用双引号"

map.put("venue_queries", "[{\"name\":\""+name+"\", \"location\": {\"locality\": \""+city+"\"}}]");

那么你生成的 JSON 将是有效的

{
"venue_queries": "[{\"name\":\"yo\", \"location\": {\"locality\": \"Solares\"}}]",
"api_key": "asfasdfasfdasdfasdfa"
}

测试片段

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

import com.google.gson.Gson;

public class GsonMap {

public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
String apikey = "asfasdfasfdasdfasdfa";
map.put("api_key", apikey);
String name = "yo";
String city = "Solares";
map.put("venue_queries", "[{\"name\":\""+name+"\", \"location\": {\"locality\": \""+city+"\"}}]");
Gson gson = new Gson();
String json = gson.toJson(map);
System.out.println("Resulting JSON:" + json);
map = gson.fromJson(json, map.getClass());
System.out.println("Resulting map values:");
for (Entry<String, String> entry : map.entrySet()) {
System.out.println("Key:" + entry.getKey() + ", value:" + entry.getValue());
}
}
}

关于java - 使用 spring 中的 Rest 模板通过 post 调用发送 json 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22856594/

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