我一直收到一个错误,说这不是有效的json数据,并一直收到错误400。我认为我的实现没有正确格式化数据。目标:尝试使用rest模板进行post调用,将JSON数据作为主体传递。似乎从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 HTMLEscape ing
GsonBuilder builder = new GsonBuilder();
builder.disableHtmlEscaping();
Gson gson = builder.create();
你会得到
{
"venue_queries": "[{'name':'yo', 'location': {'locality': 'Solares'}}]",
"api_key": "asfasdfasfdasdfasdfa"
}
无论如何,您的JSON仍然不正确。
您必须使用双引号修复地图中的场馆查询关键内容
map.put("venue_queries", "[{\"name\":\""+name+"\", \"location\": {\"locality\": \""+city+"\"}}]");
那么生成的JSON将是有效的
{
"venue_queries": "[{\"name\":\"yo\", \"location\": {\"locality\": \"Solares\"}}]",
"api_key": "asfasdfasfdasdfasdfa"
}
Tes代码段
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());
}
}
}
我需要使用rest模板使用以下详细信息进行post调用: 我需要发送带有4/5个参数的json,需要为内容类型和接受设置标题,并使用be post设置方法。 您可以帮助我使用示例代码来创建json对象、设置头并进行post调用吗
我试图实现同样的事情:如何使用查询参数表示为JSON与Spring RestTemplate?,发送JSON字符串作为URL参数在. 公认的答案提到将JSON对象作为请求参数发送通常不是一个好主意,因为您可能会面临JSON中的花括号问题。这正是当我试图对API进行GET调用时发生的事情。由于这是来自另一个系统的API,我不能要求他们更改格式,必须调用GETendpoint,将JSON作为参数传递。
我正在使用 kafka 和 spring boot,我需要将 JSON 对象发送到 kafka,关键是我能够将一个对象作为配置 KafkaTemplate 的 JSON 发送,但仅适用于此对象。 但是如果现在我想发送一个新的DTO对象呢?我是否必须声明一个新的
我使用spring rest模板作为请求发送json数组。发送请求的源代码如下: 并接受请求: 问题是它给了我以下错误:无法写入请求:找不到适合请求类型[org.json.JSONArray]的HttpMessageConverter。任何建议都是可以接受的。
本文向大家介绍JavaScript 通过POST发送和接收JSON数据,包括了JavaScript 通过POST发送和接收JSON数据的使用技巧和注意事项,需要的朋友参考一下 示例 6 提取请求承诺最初将返回Response对象。它们将提供响应头信息,但它们不直接包含响应主体,而响应主体可能尚未加载。可以使用诸如Response对象上的方法来等待响应主体加载,然后对其进行解析。.json()
我在Java客户端有以下代码,它调用基于Spring的REST服务,我得到一个HTTP 400错误。但它与POST man Client完美配合 Java客户端: 服务器端REST服务代码为 现在,当客户端发送请求时,它会给我http 400错误,这可能是因为在客户端,即时消息发送JSON字符串,而在服务器端,它是一个主体,但这在POST MAN上有效 谁能建议我如何通过Java向基于spring