改造 2.0 beta1:如何发布原始字符串正文

2022-09-03 03:31:57

我正在寻找一些方法来发布带有新改造2.0b1的原始车身的请求。像这样:

@POST("/token")
Observable<TokenResponse> getToken(@Body String body);

据我所知,应该有某种海峡“到弦”转换器,但我还不清楚它是如何工作的。

有一些方法可以在1.9中使用TypedInput实现它,但它在2.0中不再有帮助。


答案 1

在 Retrofit 2 中,您可以使用数据将正文发布到服务器,并从服务器的响应正文中读取为 。RequestBodyResponseBodyStringString

首先,您需要在改造服务中声明一个方法:

interface RetrofitService {
    @POST("path")
    Call<ResponseBody> update(@Body RequestBody requestBody);
}

接下来,您需要创建一个 and 对象:RequestBodyCall

Retrofit retrofit = new Retrofit.Builder().baseUrl("http://somedomain.com").build();
RetrofitService retrofitService = retrofit.create(RetrofitService.class);

String strRequestBody = "body";
RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain"),strRequestBody);
Call<ResponseBody> call = retrofitService.update(requestBody);

最后发出请求并将响应正文读取为:String

try {
    Response<ResponseBody> response = call.execute();
    if (response.isSuccess()) {
        String strResponseBody = response.body().string();
    }
} catch (IOException e) {
    // ...
}

答案 2

在构建 using 时,您应该为注册转换器。TypeRetrofitaddConverter(type, converter)

Converter<T>在2.0中使用类似的方法,在1.x版本中使用旧的转换器。

你应该是这样的:StringConverter

public class StringConverter implements Converter<Object>{


    @Override
    public String fromBody(ResponseBody body) throws IOException {
        return ByteString.read(body.byteStream(), (int) body.contentLength()).utf8();
    }

    @Override
    public RequestBody toBody(Object value) {
        return RequestBody.create(MediaType.parse("text/plain"), value.toString());
    }
}

笔记:

  1. ByteString来自Oikoo图书馆。
  2. 注意在你的CharsetMediaType

推荐