在改造中发送两个字符串项作为主体

时间:2017-06-21 12:16:02

标签: android retrofit retrofit2

我有一个这样的改装对象:

retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

@Headers
({
    "Content-Type: application/x-www-form-urlencoded",
            "cache-control: no-cache"
})
@POST("login")
Call<RegisterResponse> register(@Body String n1,@Body String n2);
由于两个身体注释,我知道这是不正确的 所以我必须使用这段代码

@Headers
({
    "Content-Type: application/x-www-form-urlencoded",
            "cache-control: no-cache"
})
@POST("login")
Call<RegisterResponse> register(@Body TestObject testObject);

 class TestObject{
     String n1;
     String n2;

 }

但我有一个服务器,我无法改变它,它有两个参数作为正文 当我使用邮递员时,我的服务器工作得很好,并做了它应该做的事情 但是当我使用改装时,我收到错误500&#34;服务器内部错误&#34;
我用okhttp做了这个

 HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
  interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
  OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();



  MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
  RequestBody body = RequestBody.create(mediaType, "n1=09369&n2=145616");
  Request request = new Request.Builder()
          .url(URL)
          .post(body)
          .addHeader("content-type", "application/x-www-form-urlencoded")
          .addHeader("cache-control", "no-cache")
          .addHeader("postman-token", "0761ac45-1fb7-78df-d088-2437ecb984a3")
          .build();

  okhttp3.Response response = client.newCall(request).execute();

它的工作正常,但我怎么能用改装呢?

2 个答案:

答案 0 :(得分:1)

您需要的是使用@FormUrlEncoded注释发送数据,详细了解here

你可以这样使用它:

@FormUrlEncoded
@POST("login")
Call<RegisterResponse> register(@Field("n1") String n1, @Field("n2") String n2);

答案 1 :(得分:0)

需要进行一些修改

class TestObject{
     @SerializedName("n1")
     @Expose
     String n1;//if your server is looking for key with name n1, or change it to the required key

     @SerializedName("n2")
     @Expose
     String n2;
 }

您的通话代码将与原来的相同。

希望这可能会有所帮助。:)