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。
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);
}
希望这可以帮助 !。
添加回答
举报