Как отправить JSONObject в службу REST? - PullRequest
3 голосов
/ 11 июня 2010

Получение данных с сервера REST работает хорошо, но если я хочу опубликовать объект, он не работает:

public static void postJSONObject(int store_type, FavoriteItem favorite, String token, String objectName) {
        String url = "";

        switch(store_type) {
            case STORE_PROJECT:
                url = URL_STORE_PROJECT_PART1 + token + URL_STORE_PROJECT_PART2; 
                //data = favorite.getAsJSONObject();
            break;
        }

        HttpClient httpClient = new DefaultHttpClient();
        HttpPost postMethod = new HttpPost(url);

        try {   
            HttpEntity entity = new StringEntity("{\"ID\":0,\"Name\":\"Mein Projekt10\"}");

            postMethod.setEntity(entity);

            HttpResponse response = httpClient.execute(postMethod);
            Log.i("JSONStore", "Post request, to URL: " + url);
            System.out.println("Status code: " + response.getStatusLine().getStatusCode());

        } catch (ClientProtocolException e) {

Я всегда получаю код ошибки 400.Кто-нибудь знает, что не так?

У меня есть рабочий код C #, но я не могу конвертировать:

 System.Net.WebRequest wr = System.Net.HttpWebRequest.Create("http://localhost:51273/WSUser.svc/pak3omxtEuLrzHSUSbQP/project");
            wr.Method = "POST";
            string data = "{\"ID\":1,\"Name\":\"Mein Projekt\"}";

            byte [] d = UTF8Encoding.UTF8.GetBytes(data);
            wr.ContentLength = d.Length;
            wr.ContentType = "application/json";

             wr.GetRequestStream().Write(d, 0, d.Length);
            System.Net.WebResponse wresp = wr.GetResponse();
            System.IO.StreamReader sr = new System.IO.StreamReader(wresp.GetResponseStream());
            string line = sr.ReadToEnd();

Ответы [ 3 ]

5 голосов
/ 12 июня 2010

Попробуйте установить заголовок типа контента:

postMethod.addRequestHeader ("Content-Type", "application / json");

Кстати, я настоятельно рекомендую Джерси . Он имеет клиентскую библиотеку REST , которая делает такие вещи намного проще и удобочитаемее

2 голосов
/ 11 июня 2010

Ваш C # отличается от вашего Java, и не только в синтаксисе.

Ваш C # отправляет объект application/json на сервер через HTTP POST.Я оставлю это на усмотрение HTTP-пуристов относительно того, является ли это правильным использование POST (вместо PUT).

Ваша Java создает форму с полем jsonString (значение которого - JSON),и отправляет объект application/x-www-form-urlencoded на сервер, содержащий эту форму.

0 голосов
/ 11 июня 2010

Я бы пошел прямо на сервер err_log или журнал ошибок equivelant. Сервер знает, почему он отклонил ваш запрос. Если у вас нет доступа, настройте свой собственный тестовый сервер и продублируйте проблему там, чтобы вы могли просмотреть журналы =)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...