2017-07-28 1 views
1

Je veux envoyer des données JSON au serveur qui est sous la formeComment envoyer des données json au serveur à l'aide de la rétrofit?

{ 
     "comments": "Testing", 
     "quantity": 0, 
     "retailerId": 0, 
     "retailerquote": 0, 
     "subProductId": 999, 
     "unit": "kg", 
     "wholesalerid": 999 
} 

quand il réellement obtenir publié il retournera « added » comme réponse, je ne sais pas ce qui est erroné avec ce code, il est de me montrer "Méthode Non Autorisée". Voici comment je le fais.

HashMap<String,String> header = new HashMap<String, String>(); 
       header.put("Content-type","application/json"); 
       HashMap<String,String> data = new HashMap<String, String>(); 
       data.put("comments",comments); 
       data.put("quantity",quantity); 
       data.put("retailerId",retailerID); 
       data.put("retailerquote",retailerQuote); 
       data.put("wholesalerId",wholesalerID); 
       data.put("unit",unit); 
       data.put("subProductId",subProductID); 

       Call<RequestQuoteCheck> call = RetrofitBaseAdapter.getCommonPathInterfaceRequestQuote().requestQuoteCheck(data); 

       call.enqueue(new retrofit2.Callback<RequestQuoteCheck>() { 

        @Override 
        public void onResponse(Call<RequestQuoteCheck> call, Response<RequestQuoteCheck> response) { 

         Toast.makeText(getApplicationContext(),response.message(),Toast.LENGTH_SHORT).show(); 

        } 

        @Override 
        public void onFailure(Call<RequestQuoteCheck> call, Throwable t) { 

        } 
       }); 

c'est classe d'adaptateur de base

public static WebserviceMethods getCommonPathInterfaceRequestQuote() { 
     final OkHttpClient okHttpClient = new OkHttpClient.Builder() 
       .readTimeout(30, TimeUnit.SECONDS) 
       .connectTimeout(30, TimeUnit.SECONDS) 
       .build(); 
     Retrofit restAdapterRequestQuote = new Retrofit.Builder() 
       .baseUrl(Constants.baseURLforRequestQuote) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .client(okHttpClient) 
       .build(); 
     WebserviceMethods retrofitinterfaces = restAdapterRequestQuote.create(WebserviceMethods.class); 
     return retrofitinterfaces; 
    } 
} 

et c'est le fichier webServiceMethods.java

@POST("requestQuoteCheck") 
Call<RequestQuoteCheck> requestQuoteCheck(
     @HeaderMap Map<String,String> data); 
+0

Vous pouvez modifier la méthode de requête '' 'GET'''. – KeLiuyue

Répondre

0

écrire comme ci-dessous

@POST("requestQuoteCheck") 
Call<RequestQuoteCheck> requestQuoteCheck(
     @Body HashMap<String,String> data); 

créer Interceptor adaptateur comme ci-dessous

Interceptor interceptor = new Interceptor() { 
      @Override 
      public okhttp3.Response intercept(Chain chain) throws IOException { 
       Request newRequest; 

       newRequest = chain.request().newBuilder() 

         .addHeader("Content-Type","application/json") 
         .method(chain.request().method(), chain.request().body()) 
         .build(); 

       return chain.proceed(newRequest); 
      } 
     }; 

et l'adaptateur comme ci-dessous

public static WebserviceMethods getCommonPathInterfaceRequestQuote() { 
     final OkHttpClient okHttpClient = new OkHttpClient.Builder() 
       .readTimeout(30, TimeUnit.SECONDS) 
       .connectTimeout(30, TimeUnit.SECONDS) 
       .addInterceptor(interceptor); 
       .build(); 
     Retrofit restAdapterRequestQuote = new Retrofit.Builder() 
       .baseUrl(Constants.baseURLforRequestQuote) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .client(okHttpClient) 
       .build(); 
     WebserviceMethods retrofitinterfaces = restAdapterRequestQuote.create(WebserviceMethods.class); 
     return retrofitinterfaces; 
    } 

Deuxième option:

@Headers("Content-Type: application/json") 
@POST("requestQuoteCheck") 
Call<RequestQuoteCheck> requestQuoteCheck(
     @Body HashMap<String,String> data); 
+0

ne fonctionne toujours pas, même réponse "MÉTHODE NON AUTORISÉE" –

+0

vérifier la réponse mise à jour. –

+0

problème de mise en œuvre Interceptor –

1

utiliser pour transmettre des données en GSON instantanée de format des données de passage en paire de valeurs String key.

gradle: -

dependencies { 
    compile 'com.google.code.gson:gson:2.8.0' 
    } 
0

Vous pouvez faire comme ça.

HashMap<String, String> header = new HashMap<String, String>(); 
    header.put("Content-type", "application/json"); 
    HashMap<String, String> data = new HashMap<String, String>(); 
    data.put("comments", comments); 
    data.put("quantity", quantity); 
    data.put("retailerId", retailerID); 
    data.put("retailerquote", retailerQuote); 
    data.put("wholesalerId", wholesalerID); 
    data.put("unit", unit); 
    data.put("subProductId", subProductID); 

    // edited here 
    Gson gson = new Gson(); 
    String jsonString = gson.toJson(data); 
    RequestBody body = RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"), jsonString); 
    Call<RequestQuoteCheck> call = RetrofitBaseAdapter.getCommonPathInterfaceRequestQuote().requestQuoteCheck(body); 

    call.enqueue(new retrofit2.Callback<RequestQuoteCheck>() { 

     @Override 
     public void onResponse(Call<RequestQuoteCheck> call, Response<RequestQuoteCheck> response) { 

      Toast.makeText(getApplicationContext(), response.message(), Toast.LENGTH_SHORT).show(); 

     } 

     @Override 
     public void onFailure(Call<RequestQuoteCheck> call, Throwable t) { 

     } 
    }); 

demande Code

// edited here ,exchange POST to GET 
@Headers({"Content-Type: application/json","Accept: application/json"}) 
@GET("requestQuoteCheck") 
Call<RequestQuoteCheck> requestQuoteCheck(@Body RequestBody body); 

Vous devez ajouter Gson.

compile 'com.google.code.gson:gson:2.8.0' 
+0

ne fonctionne pas, même réponse "méthode non autorisée" –

+0

@GajendraSinghRathore J'ai changé '' '' POST''' en '' 'GET'''. – KeLiuyue

0

Essayez en envoyant les params multipart

@Multipart 
@POST("/QuickBroker/broker/uploadDocuments") 
Call<ResponseBody> uploadFile(@Part("comments") RequestBody comments,@Part("quantity") RequestBody quantity,@Part("retailerId") RequestBody retailerId,@Part("retailerquote") RequestBody retailerquote,@Part("wholesalerId") RequestBody wholesalerId); 

Et appelez cela comme ci-dessous en passant en-tête

RequestBody mobile = RequestBody.create(MediaType.parse("multipart/form-data"), pref.getString(AppConstants.MOBILE_NUMBER,"")); 
if(body1 != null && body2 != null && body3 != null && body4 != null) { 
    RetrofitAPIs retrofitAPIs = RetrofitBuilders.getInstance().getAPIService(RetrofitBuilders.getBaseUrl()); 

    Call call = retrofitAPIs.uploadFile(param1, param2, param3, param4, param5); 

    call.enqueue(new Callback<ResponseBody>() { 
     @Override 
     public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { 

     } 

     @Override 
     public void onFailure(Call<ResponseBody> call, Throwable t) { 
      pd.dismiss(); 
     } 

    }); 
}else{ 

}