美文网首页
android Retrofit2 返回json客户端与服务端加

android Retrofit2 返回json客户端与服务端加

作者: 张漂亮1号 | 来源:发表于2020-10-05 11:26 被阅读0次

对response进行解密,retrofit设置自定义的ConverterFactory,因客户端与服务端使用json通信,因此我们参考官方提供GsonConverterFactory编写

Retrofit retrofit = new Retrofit.Builder()
                .client(getOkHttpClient())
                .addConverterFactory(CustomGsonConverterFactory.create())
                .baseUrl(BASE_URL)
                .build();

class CustomGsonResponseConverter<T> implements Converter<ResponseBody, T> {

    private final Gson gson;
    private final TypeAdapter<T> adapter;

    CustomGsonResponseConverter(Gson gson, TypeAdapter<T> adapter) {
        this.gson = gson;
        this.adapter = adapter;
    }

    @Override
    public T convert(ResponseBody value) throws IOException {
        try {
            String originalBody = value.string();
            // 解密
            String body = EncryptUtils.decryptParams(originalBody);
            // 获取json中的code,对json进行预处理
            JSONObject json = new JSONObject(body);
            int code = json.optInt("code");
            // 当code不为0时,设置data为{},这样转化就不会出错了
            if (code != 0) {
                json.put("data", new JSONObject());
                body = json.toString();
            }

            return adapter.fromJson(body);
        } catch (Exception e) {
            throw new RuntimeException(e.getMessage());
        } finally {
            value.close();
        }
    }

class GsonRequestBodyConverter<T> implements Converter<T, RequestBody> {
  private static final MediaType MEDIA_TYPE = MediaType.parse("application/json; charset=UTF-8");
  private static final Charset UTF_8 = Charset.forName("UTF-8");

  private final Gson gson;
  private final TypeAdapter<T> adapter;

  GsonRequestBodyConverter(Gson gson, TypeAdapter<T> adapter) {
    this.gson = gson;
    this.adapter = adapter;
  }

  @Override public RequestBody convert(T value) throws IOException {
    Buffer buffer = new Buffer();
    Writer writer = new OutputStreamWriter(buffer.outputStream(), UTF_8);
    JsonWriter jsonWriter = gson.newJsonWriter(writer);
    adapter.write(jsonWriter, value);
    jsonWriter.close();
    return RequestBody.create(MEDIA_TYPE, buffer.readByteString());
  }
}

image
借鉴原文https://blog.csdn.net/weixin_43901866/article/details/86578148

相关文章

  • android Retrofit2 返回json客户端与服务端加

    对response进行解密,retrofit设置自定义的ConverterFactory,因客户端与服务端使用js...

  • Retrofit自定义Converter数据异常处理攻略

    开发中客户端时常与服务端打交道,客户端请求参数到服务端,服务端返回响应数据到客户端,开发中用的比较多的就是Json...

  • 避免陷入 double 转 NSString 的坑

    服务端给客户端返回数据一般使用 JSON 字符串,iOS 端一般会将 JSON 转成 Dictionary 使用。...

  • 了解 HandyJSON

    JSON是移动端开发常用的应用层数据交换协议。最常见的场景便是,客户端向服务端发起网络请求,服务端返回JSON文本...

  • Json转模型1--SwiftyJson

    JSON是移动端开发常用的应用层数据交换协议。最常见的场景便是,客户端向服务端发起网络请求,服务端返回JSON文本...

  • 2018-12-10 ssm整合加json实现增删改查

    之所以返回json数据是因为,不止是(客户端)浏览器,还有Android,直接反应给这些客户端json数据好解析 ...

  • HandyJSON

    背景JSON是移动端开发常用的应用层数据交换协议。最常见的场景便是,客户端向服务端发起网络请求,服务端返回JSON...

  • https链接过程

    废话不说直接上图 A端、B端可为客户端与服务端 服务端与服务端此处以Android开发为例将AB视为客户端与服务端...

  • https单向认证和双向认证学习笔记

    单向认证 客户端向服务端发送SSL协议版本号、加密算法种类、随机数等信息。 服务端给客户端返回SSL协议版本号、加...

  • 关于json数据的学习(二)

    这里总结一下android网络编程数据传递方面的东西,客户端传递给服务端然后服务端返回给客户端数据表示可以接受到。...

网友评论

      本文标题:android Retrofit2 返回json客户端与服务端加

      本文链接:https://www.haomeiwen.com/subject/cdcauktx.html