wysyłanie danych json pocztą przy użyciu szablonu odpoczynku od wiosny


Ciągle otrzymuję komunikat o błędzie mówiącym, że są to nieprawidłowe dane json i ciągle otrzymuję błąd 400. Nie sądzę, że implementacja, którą mam, prawidłowo formatuje dane.
Cel: Próba wykonania połączenia pocztowego przy użyciu szablonu REST, przekazując dane JSON jako treść. Wygląda na to, że podczas konwersji danych z mapy do json nie konwertuje się nieprawidłowo na 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";
}
}

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Zgadza się, wynikowy kod JSON jest nieprawidłowy
{
"venue_queries": "[{\u0027name\u0027:\u0027yo\u0027, \u0027location\u0027: {\u0027locality\u0027: \u0027Solares\u0027}}]",
"api_key": "asfasdfasfdasdfasdfa"
}

Twój kod JSON jest nieprawidłowy, ponieważ GSON domyślnie wymyka się ze znaków HTML i umieszcza pojedyncze cudzysłowy jako równoważny kod znaku Unicode U + 0027
jeśli się rozłączysz

Gson HTMLEscaping
http://google-gson.googlecode. ... %2529
GsonBuilder builder = new GsonBuilder();
builder.disableHtmlEscaping();
Gson gson = builder.create();

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

w każdym razie twój JSON jest nadal zły.
Musisz poprawić kluczową zawartość
area_queries
na mapie
używając podwójnych cudzysłowów
"
map.put("venue_queries", "[{\"name\":\""+name+"\", \"location\": {\"locality\": \""+city+"\"}}]");

wtedy wynikowy JSON będzie prawidłowy
{
"venue_queries": "[{\"name\":\"yo\", \"location\": {\"locality\": \"Solares\"}}]",
"api_key": "asfasdfasfdasdfasdfa"
}

Fragment 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());
}
}
}

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się