改造服务器响应在android中得到307

时间:2019-06-05 14:32:26

标签: android retrofit retrofit2

第一步:     需要提供输入到server.as下图     enter image description here

step2:
get response from server ,as below image.

 ![enter image description here][2]

step3:
MainActivity.java

@RequiresApi(api = Build.VERSION_CODES.O)
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.test);
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(ApiInterface.URL_BASE)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    ApiInterface apiInterface = retrofit.create(ApiInterface.class);


    // prepare call in Retrofit 2.0
    try {
        JSONObject paramObject = new JSONObject();
        paramObject.put("merchant_id", "aaaaa");
        paramObject.put("secret_key", "bbbbb");

        Call<RequestBody> userCall = apiInterface.getUser(paramObject.toString());
        userCall.enqueue(this);
    } catch (JSONException e) {
        e.printStackTrace();
    }
}
@Override
public void onResponse(Call<RequestBody> call, Response<RequestBody> response) {
    Log.d("TEST","TEST--onResponse1---"+call);
    Log.d("TEST","TEST--onResponse2---"+response);

}

@Override
public void onFailure(Call<RequestBody> call, Throwable t) {
    Log.d("TEST","TEST--onFailure1--"+call);
    Log.d("TEST","TEST--onFailure1--"+t);
}
========================================================
 step4:  ApiInterface.hava

public interface ApiInterface {

@Headers("Content-Type: application/json")
Call<RequestBody> getUser(@Body String body);
 }
  

日志将转到“ onResponse.code()”得到307”,但我认为能够   获得正确的数据。       我是翻新服务的新手。请帮助我。

2 个答案:

答案 0 :(得分:0)

不使用其他库就无法将String发送给Retrofit。

由于您已经在使用Gson。创建一个Gson可以序列化的类。

class Credentials {
    @SerializedName("merchant_id")
    public String merchantId;

    @SerializedName("secret_key")
    public String secretKey;
}

接口方法。 @注意输入类型。

@Headers("Content-Type: application/json")
Call<RequestBody> getUser(@Body Credentials credentials);

答案 1 :(得分:0)

307Temporary Redirect-您可能必须遵循该重定向。

这意味着,您需要配置OkHttpClient来这样做:

OkHttpClient client = new OkHttpClient.Builder()
   .followSslRedirects(true)
   .followRedirects(true)
   .build();

,然后将其设置为retrofit2的客户端:

retrofit = new retrofit2.Retrofit.Builder()
    .baseUrl(Constants.API_BASE_URL)
    .client(client)
    .build();