2015-09-28 4 views
4

У меня есть внутренняя ошибка сервера 500, каждый раз, когда я пытаюсь отправить запрос POST через Retrofit. Когда я отправляю GET-запрос, он правильно отправляет. Я уверен, что с серверами все в порядке. Что случилось с моим кодом?Модернизация: ошибка внутреннего сервера 500

String ENDPOINT = "http://52.88.40.210"; 
    //model for request 
     FriendModel ff = new FriendModel(); 
     ff.setFriendNumber("380935275259"); 
     ff.setId(516); 
     ff.setNumber("380936831127"); 

     RestAdapter adapter = new RestAdapter.Builder() 
       .setEndpoint(ENDPOINT) 
       .build(); 
     WayfAPI api = adapter.create(WayfAPI.class); 
     api.getFriendsLocation(ff, new Callback<List<FriendLocationModel>>() { 
      @Override 
      public void success(List<FriendLocationModel> friendLocationModels, Response response) { 
       for (FriendLocationModel ff : friendLocationModels) { 
        Log.d("myLogs", "===========Successful=========="); 
        Log.d("myLogs", "Id: " + ff.getId()); 
        Log.d("myLogs", "Number: " + ff.getNumber()); 
        Log.d("myLogs", "GeoLocation: : " + ff.getGeoLocation()); 
       } 
      } 

      @Override 
      public void failure(RetrofitError error) { 
       Log.d("myLogs", "-------ERROR-------"); 
       Log.d("myLogs", Log.getStackTraceString(error)); 
      } 
     }); 
    } 

Декларация запроса:

@Headers({ 
     "Accept: application/json", 
     "Content-type: application/json" 
}) 
@POST("/api/geo/getLoc") 
public void getFriendsLocation(@Body FriendModel friendModel, Callback<List<FriendLocationModel>> response); 

Exampe запроса и ответа от Почтальон: enter image description here

+1

Кажется, что в почтальоне вы отправляете массив FriendModel, но в своем коде вы отправляете один объект. Что ожидает сервер? –

+0

@UdiI Thak вам за ответ, да, серверная сторона не может распознать один объект JSON. Я могу изменить serveride и научить его распознанному одиночному объекту JSON, но это плохая идея. Брак, больше запросов - больше ресурсов на серверах. Мне нужно знать, как я могу отправить запрос с массивом объектов JSON через Retrofit. – neustart47

ответ

5

Похоже, что в почтальона вы посылаете массив FriendModel, но в коде вы отправляете один объект.

Просто измените объект вы отправляете, и вместо того, чтобы посылать один объект, отправить список, как сервер ожидает

List<FriendModel> friendsList = new ArrayList<FriendModel>(); 

    FriendModel ff = new FriendModel(); 
    ff.setFriendNumber("380935275259"); 
    ff.setId(516); 
    ff.setNumber("380936831127"); 

    friendsList.add(ff); 

Вы также должны изменить подпись:

public void getFriendsLocation(@Body FriendModel friendModel, Callback<List<FriendLocationModel>> response); 

в

public void getFriendsLocation(@Body List<FriendModel> friendModel, Callback<List<FriendLocationModel>> response); 
+1

Спасибо, я хочу ответить на этот вопрос несколько последних дней. Спасибо. – neustart47