为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用改造在 api post 方法中将字符串作为正文传递?

如何使用改造在 api post 方法中将字符串作为正文传递?

心有法竹 2023-11-01 22:15:33
我正在开发一个 Android 应用程序,它发送用户输入的数据(通过编辑文本框),并调用 POST API 方法来在该 API 正文中发送此数据考虑 API URL 为“htpps://xxxxx.com/forms/xxxxxx/reponse”内容类型“Json(应用程序/json)”内容如下:{"answers":"[{\"questionId\":\"r8554145065f6486d8a362bec92030a06\",\"answer1\":\"xxxxx\"},  {\"questionId\":\"rf516c5bf916e4d6d960a1f8abc82f33b\",\"answer1\":\"xxxx\"}]"}我的问题是,如何将这种类型的主体传递给改造,而不是内容中的“XXXXX”,而是一个接受用户输入的字符串?
查看完整描述

2 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

您可能已经在使用接口来进行 api 调用,这就是您将 String 正文添加到请求的位置。


public interface YourService{

  @POST("forms/xxxxxx/reponse")

  Call<Object> makeCall(@Body String body);

}

如果您尚未使用带有 Retrofit 的接口,则可以使用现有的 RetrofitClient 创建上述接口的实例:


YourService service = retrofitClient.create(YourService.class);

现在您可以通过在服务实例上调用 makeCall 来访问 api:


service.makeCall(yourCustomString).enqueue(new Callback<Object>() {

    @Override

    public void onResponse(Response<MovieResponse> response) {...}


    @Override

    public void onFailure(Throwable t) {...}

});

您可以使用 String 生成器等构建“yourCustomString”,尽管我不建议这样做,但我会使用 ConverterFactory 并将您的 JSON 数据映射到 Java POJO。例如 Moshi (com.squareup.retrofit2:converter-moshi)。如果这样做,您可以使用 Java POJO 作为 @Body 注释属性,并且只需在 POJO 上设置两个属性“questionId”和“answer1”,而不是构建字符串。


如果你这样做,你最终会得到两个类:


public class Answer {

    @Json(name = "questionId")

    public String questionId;


    @Json(name = "answer1")

    public String answer1;

}


public class Body {

    @Json(name = "answers")

    private List<Answer> answers = new LinkedList<>();

}

现在,您只需创建一个 Body 对象,然后将任意数量的答案添加到answers 属性中,然后使用 Body 对象作为改造界面上的参数。


注意:如果这样做,则必须在构建时将 MoshiConverterFactory 添加到 RetrofitClient。


查看完整回答
反对 回复 2023-11-01
?
动漫人物

TA贡献1815条经验 获得超10个赞

我假设您已经熟悉如何实现用于进行 API 调用的存储库和接口。


对于这种情况,您首先需要 DTO 来回答。


public class AnswerDTO

{

    private String questionId;

    private String answer1;


    public AnswerDTO(String questionId, String answer1)

    {

        this.questionId = questionId;

        this.answer1 = answer1;

    }

}

现在您可以创建一个用于 API 调用的接口。


public interface QuestionsService

{

    @FormUrlEncoded

    @POST("requestUrlHere")

    Call<Response> yourApiCall(@Field("answers[]") List<AnswerDTO> answers);

}

希望这可以帮助 !。


查看完整回答
反对 回复 2023-11-01
  • 2 回答
  • 0 关注
  • 109 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信