当前位置: 首页 > 知识库问答 >
问题:

retofit2如何在正文中张贴纯字符串

李成礼
2023-03-14

我用的是改装2

com.squareup.retarfit2:改装:2.0.1

我的rest API(Post)返回纯字符串作为响应

如何在正文中张贴字符串

public final class ToStringConverterFactory extends Converter.Factory {
        @Override
        public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) {
            //noinspection EqualsBetweenInconvertibleTypes
            if (String.class.equals(type)) {
                return new Converter<ResponseBody, Object>() {

                    @Override
                    public Object convert(ResponseBody responseBody) throws IOException {
                        return responseBody.string();
                    }
                };
            }

            return null;
        }

        @Override
        public Converter<?, RequestBody> requestBodyConverter(Type type, Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) {
            if (String.class.equals(type)) {
                return new Converter<String, RequestBody>() {

                    @Override
                    public RequestBody convert(String value) throws IOException {
                        return RequestBody.create(MediaType.parse("text/plain"), value);
                    }
                };
            }

            return null;
        }


    }

我的装修师是

Retrofit retrofit = new Retrofit.Builder().baseUrl(root_url).addConverterFactory(new ToStringConverterFactory()).build();

我的回调是

Callback<String>  callback = new Callback<String>() {
            @Override
            public void onResponse(Call<String> call, Response<String> response) {



                System.out.println("===>>> onResponse body res "+response.body());
                System.out. println("===>>> onResponse error body res "+response.errorBody());

            }

            @Override
            public void onFailure(Call<String> call, Throwable t) {
                System.out.println("===>>> onFailure "+call.toString()+" "+t.toString());
                t.printStackTrace();
            }
        };

我的RetroService接口是

public interface RetroService {


    @POST("/validateUser")
    Call<String> login(@Body String body);

}

和API调用

Call<String> loginCall = service.login(req);
                    loginCall.enqueue(callback);

我得到的是onresponse()response.body中,它总是显示为null。

请澄清我做错了什么。

在adv中的Thx。

共有1个答案

乜业
2023-03-14

我在网上谷歌,发现最新GSON可以处理纯文本响应。将此添加到Gradle中:

compile 'com.google.code.gson:gson:2.6.2'
compile 'com.squareup.okhttp3:okhttp:3.1.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.1'
compile 'com.squareup.okhttp3:logging-interceptor:3.2.0'

在代码中使用这个

import com.google.gson.Gson;
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

// Add log
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
httpClient.interceptors().add(logging);

Gson gson = new GsonBuilder()
                    .setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
                    .create();

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(root_url)
            .addConverterFactory(GsonConverterFactory.create(gson))
            .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
            .client(httpClient.build())
            .build();

请尝试一下,看看您是否可以处理字符串作为响应。

这是我在网上找到的,不确定它是否适用于你。请试一试。链接

 类似资料:
  • 本文向大家介绍如何在python字符串中输入纯粹的{},包括了如何在python字符串中输入纯粹的{}的使用技巧和注意事项,需要的朋友参考一下 python的format函数通过{}来格式化字符串 如果需要在文本中包含{}字符,这样使用就会报错: 需要通过{{}},也就是double的{}来进行转义 参考链接:     https://docs.python.org/3/library/strin

  • 问题内容: 这是Web上RTE的常见问题之一。您能否指导我完成以下步骤: 粘贴为纯文本 保留HTML,但删除WORD / HTML样式 我想直接在粘贴(paste_preprocess回调)上执行此操作,而无需打开粘贴插件提供的对话框。 有什么想法/经验吗? 谢谢, 问题答案: 这就是我要做的粘贴纯文本。 1. paste_preprocess设置(在tinymce init中) 2.函数stri

  • 我将按照本教程学习如何用Python构建应用程序。 教程(接近尾声)讲述了如何在python中获得一个发布的AJAX json,如下所示: 超文本标记语言代码: Python代码: 当我运行脚本并在浏览器中点击按钮“点击我”时,当我检查浏览器中的响应时,我会得到“500内部服务器错误”。如果我打印数据变量,它会在单击事件的终端中打印出无。我尝试了评论中给出的建议,在python脚本中使用get_j

  • 我使用Wiremock服务器模拟响应,并使用JSON格式模拟响应。 这不起作用,因为电子邮件中的“@”未编码。我需要传递“test_user@gmail”才能使请求正常工作。 这里只有一个地方有零钱。但对于其他模拟,请求正文有许多特殊字符**(@,%*\n\s)**。有没有办法在Wiremock中处理编码部分。 另外,有没有办法在url中编码字符串?

  • 我正在接受用户输入的NS字符串,将其转换为具有NSUTF8字符串编码的NSData。然后,我使用CCCrypt使用随机盐和IV以及用户输入的密码来加密该数据。 我的问题是,我如何将这种加密的NSData转换成一种可以被纯文本AES解密器(如http://www.everpassword.com/aes-encryptor?)解密的格式 此外,CCCrypt会自动添加盐吗 在这方面的任何帮助将不胜感