java - 使用正文参数改造 POST 请求 android

标签 java android http-post retrofit retrofit2

我需要通过改造执行发布请求,但我遇到了一个我不太理解的问题。在尝试使用代码之前,我使用 Postman 测试了 api 调用,请求如下所示:

capture1 enter image description here

这是我的安卓代码:

public class API {

private static <T> T builder(Class<T> endpoint) {

    return new Retrofit.Builder()
            .baseUrl(Utils.API_BASE_URL)
            .addConverterFactory(ScalarsConverterFactory.create())
            .addConverterFactory(GsonConverterFactory.create())
            .build()
            .create(endpoint);
}
public static AllRequests request() {
    return builder(AllRequests.class);
}
}

编辑请求:

@POST("api/android-feedback")
@Headers({"Content-Type: application/x-www-form-urlencoded", "Authorization: F#@3FA@#Rad!@%!2s"})
Call<String> sendFeedback(@Body FeedbackBody body);

反馈正文:

public class FeedbackBody{
private final String email;
private final String feedback;

public FeedbackBody(String email, String feedback){
    this.email = email;
    this.feedback = feedback;
}

最后我构造请求并等待响应,问题是我在 onFail 方法中接收消息

   private void sendFeedbackRequest(){
    API.request().sendFeedback(new FeedbackBody("testmeil@meil.com", "test feedback").enqueue(new Callback<String>() {
        @Override
        public void onResponse(Call<String> call, Response<String> response) {
            goToMainActivity();
        }

        @Override
        public void onFailure(Call<String> call, Throwable t) {
            Toast.makeText(SplashScreenActivity.this, R.string.try_again_later, Toast.LENGTH_SHORT).show();
        }
    });

编辑: 仍然无法正常工作..我想我弄清楚了问题出在哪里,因为服务器端等待没有 Json 格式的简单 POST 请求,我认为 Retrofit 默认使用 JSON 格式,如果我发送 POST 请求并使用 JSON 格式化 Body 参数服务器将无法解析我的请求,是否有机会像 POSTMAN 一样发送简单的 POST 请求而不用 JSON 格式化?

  • 像这样发送 Php api 等待请求:

$_POST['feedback'] = 'blabla'; $_POST['email'] = 'blabla..';

如果他收到 Json 格式的请求,则无法解析它,因此我会收到失败的响应。

最佳答案

首先你需要创建请求(POJO类)

public class FeedbackRequest {
   public String email;
   public String feedback;
}

当您调用 sendFeedbackRequest() 时,传递 FeedbackRequest,如下所示”

FeedbackRequest req = new FeedbackRequest();
req.email= "email";
req.feedback= "feedback"
sendFeedbackRequest(req)

之后你的sendFeedbackRequest()应该是这样的

  private void sendFeedbackRequest(FeedbackRequest request){
      API.request().sendFeedback(request).enqueue(new Callback<String>() {
      @Override
      public void onResponse(Call<String> call, Response<String> response) {
        goToMainActivity();
      }

      @Override
      public void onFailure(Call<String> call, Throwable t) {
        Toast.makeText(SplashScreenActivity.this, R.string.try_again_later, Toast.LENGTH_SHORT).show();
    }
});

而你的改造请求应该是这样的,

@FormUrlEncoded
@POST("api/android-feedback")
@Headers({"Content-Type: application/json", "Authorization: F31daaw313415"})
Call<String> sendFeedback(@Body FeedbackRequest request);

现在它应该可以工作了。随时问任何问题。

关于java - 使用正文参数改造 POST 请求 android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56263599/

相关文章:

javascript - 使用 jquery 在 ASP.NET MVC 中进行异常管理

javascript - 防止在jQuery中重复提交表单

java - 具有许多不同类型/构造函数的类枚举类的模式

java - 过滤器不工作

java - 我应该在此程序中传递什么参数以避免java.lang错误?

Android Studio 4.1.1 macOS 全屏错误

java - Android 根据预定义值确定方向和屏幕尺寸

java - 在 Android Java 中使用 OpenGL 声明要绘制的 Float 数组时出错

java - 如何从 ListPreference 中获取选定的项目

web-services - HTTP-GET-to-HTTP-POST 代理