猿问

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

我正在开发一个 Android 应用程序,它发送用户输入的数据(通过编辑文本框),并调用 POST API 方法来在该 API 正文中发送此数据


考虑 API URL 为“htpps://xxxxx.com/forms/xxxxxx/reponse”


内容类型“Json(应用程序/json)”


内容如下:


{"answers":

"[{\"questionId\":\"r8554145065f6486d8a362bec92030a06\",\"answer1\":\"xxxxx\"},

  {\"questionId\":\"rf516c5bf916e4d6d960a1f8abc82f33b\",\"answer1\":\"xxxx\"}]"}

我的问题是,如何将这种类型的主体传递给改造,而不是内容中的“XXXXX”,而是一个接受用户输入的字符串?


心有法竹
浏览 110回答 2
2回答

茅侃侃

您可能已经在使用接口来进行 api 调用,这就是您将 String 正文添加到请求的位置。public interface YourService{&nbsp; @POST("forms/xxxxxx/reponse")&nbsp; Call<Object> makeCall(@Body String body);}如果您尚未使用带有 Retrofit 的接口,则可以使用现有的 RetrofitClient 创建上述接口的实例:YourService service = retrofitClient.create(YourService.class);现在您可以通过在服务实例上调用 makeCall 来访问 api:service.makeCall(yourCustomString).enqueue(new Callback<Object>() {&nbsp; &nbsp; @Override&nbsp; &nbsp; public void onResponse(Response<MovieResponse> response) {...}&nbsp; &nbsp; @Override&nbsp; &nbsp; 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 {&nbsp; &nbsp; @Json(name = "questionId")&nbsp; &nbsp; public String questionId;&nbsp; &nbsp; @Json(name = "answer1")&nbsp; &nbsp; public String answer1;}和public class Body {&nbsp; &nbsp; @Json(name = "answers")&nbsp; &nbsp; private List<Answer> answers = new LinkedList<>();}现在,您只需创建一个 Body 对象,然后将任意数量的答案添加到answers 属性中,然后使用 Body 对象作为改造界面上的参数。注意:如果这样做,则必须在构建时将 MoshiConverterFactory 添加到 RetrofitClient。

动漫人物

我假设您已经熟悉如何实现用于进行 API 调用的存储库和接口。对于这种情况,您首先需要 DTO 来回答。public class AnswerDTO{&nbsp; &nbsp; private String questionId;&nbsp; &nbsp; private String answer1;&nbsp; &nbsp; public AnswerDTO(String questionId, String answer1)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; this.questionId = questionId;&nbsp; &nbsp; &nbsp; &nbsp; this.answer1 = answer1;&nbsp; &nbsp; }}现在您可以创建一个用于 API 调用的接口。public interface QuestionsService{&nbsp; &nbsp; @FormUrlEncoded&nbsp; &nbsp; @POST("requestUrlHere")&nbsp; &nbsp; Call<Response> yourApiCall(@Field("answers[]") List<AnswerDTO> answers);}希望这可以帮助 !。
随时随地看视频慕课网APP

相关分类

Java
我要回答