首页 > 其他分享 >Retrofit2 使用FastJson作为Converter.m

Retrofit2 使用FastJson作为Converter.m

时间:2024-07-16 15:07:25浏览次数:8  
标签:FastJson Retrofit2 Converter Type Retrofit import type public

首先创建一个FastJsonRequestBodyConverter类

package com.rrc.core.net.converter;

import com.alibaba.fastjson.JSON;

import java.io.IOException;

import okhttp3.MediaType;
import okhttp3.RequestBody;
import retrofit2.Converter;

/**
 * ================================================
 *
 * @Description: 描述
 * @Author: wxianing
 * @Date: 2024/7/16 14:35
 * ================================================
 */
public class FastJsonRequestBodyConverter<T> implements Converter<T, RequestBody> {

    private static final MediaType MEDIA_TYPE = MediaType.parse("application/json; charset=UTF-8");

    @Override
    public RequestBody convert(T value) throws IOException {
        return RequestBody.create(MEDIA_TYPE, JSON.toJSONBytes(value));
    }
}

接着创建FastJsonResponseBodyConverter类

package com.rrc.core.net.converter;

import com.alibaba.fastjson.JSON;

import java.io.IOException;
import java.lang.reflect.Type;

import okhttp3.ResponseBody;
import okio.BufferedSource;
import okio.Okio;
import retrofit2.Converter;

/**
 * ================================================
 *
 * @Description: 描述
 * @Author: wxianing
 * @Date: 2024/7/16 14:34
 * ================================================
 */
public class FastJsonResponseBodyConverter<T> implements Converter<ResponseBody, T> {
    private final Type type;

    public FastJsonResponseBodyConverter(Type type) {
        this.type = type;
    }

    /*
     * 转换方法
     */
    @Override
    public T convert(ResponseBody value) throws IOException {
        BufferedSource bufferedSource = Okio.buffer(value.source());
        String tempStr = bufferedSource.readUtf8();



        bufferedSource.close();
        return JSON.parseObject(tempStr, type);

    }
}

接着创建FastJsonConverterFactory类

package com.rrc.core.net.converter;

import java.lang.annotation.Annotation;
import java.lang.reflect.Type;

import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.Converter;
import retrofit2.Retrofit;

/**
 * ================================================
 *
 * @Description: 描述
 * @Author: wxianing
 * @Date: 2024/7/16 14:33
 * ================================================
 */
public class FastJsonConverterFactory extends Converter.Factory {

    public static FastJsonConverterFactory create() {
        return new FastJsonConverterFactory();
    }

    /**
     * 需要重写父类中responseBodyConverter,该方法用来转换服务器返回数据
     */
    @Override
    public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) {
        return new FastJsonResponseBodyConverter<>(type);
    }

    /**
     * 需要重写父类中responseBodyConverter,该方法用来转换发送给服务器的数据
     */
    @Override
    public Converter<?, RequestBody> requestBodyConverter(Type type, Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) {
        return new FastJsonRequestBodyConverter<>();
    }
}

然后在获取Retrofit实例时添加

 mRetrofit = Retrofit.Builder()
                    .baseUrl(Constants.CONSTANTS_APP_DOMAIN)
                    .client(getOkHttpClient())
//                    .addConverterFactory(BaseConverterFactory.create())
                    .addConverterFactory(FastJsonConverterFactory.create())
                    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                    .build()

这样Retrofit就可以使用Fastjson解析数据了

标签:FastJson,Retrofit2,Converter,Type,Retrofit,import,type,public
From: https://www.cnblogs.com/wxianing/p/18305283

相关文章

  • IT6161: MIPI to HDMI Converter
    TheIT6161isahigh-performanceandlow-powerMIPItoHDMIconverter,fullycompliantwithMIPID-PHY1.1,DSI1.1andHDMI1.4b,HDCP1.4andbackwardcompatiblewithDVI1.0specifications. IT6161是一款高性能、低功耗的MIPI到HDMI转换器,完全符合MIPID-PH......
  • Maven工程下:alibaba fastjson2的各种序列化:java对象转json对象、json对象转java对象
    pom文件导入fastjson2坐标:<dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.51</version></dependency>UserVO对象:@Data@AllArgsConstructor......
  • Java反射与Fastjson的危险反序列化
    Preface在前文中,我们介绍了Java的基础语法和特性和fastjson的基础用法,本文我们将深入学习fastjson的危险反序列化以及预期相关的Java概念。什么是Java反射?在前文中,我们有一行代码ComputermacBookPro=JSON.parseObject(preReceive,Computer.class);这行代码是什么意......
  • 2024年最佳鼠标灵敏度转换工具——“Mouse Sensitivity Converter“
    一、引言在现代的竞技游戏中,鼠标灵敏度是每个玩家都无法忽视的重要因素。无论你是FPS射击游戏达人,还是MOBA策略游戏爱好者,你都需要一款合适的鼠标灵敏度来提升你的游戏表现。然而,在不同游戏之间调整灵敏度常常让人头疼。今天我们将为大家介绍一款能够解决这一难题的神器——"Mous......
  • fastjson低版本反序列化bug/设计缺陷记录
    1.问题场景 _id正常的赋值相同的代码我们继续跑 _id的值被反序列化到id上了???相同的代码,跑出不一样的反序列化结果,amazing2.问题探究2.1List<FieldInfo>反序列化时会先创建一个List<FieldInfo>每一个FieldInfoList<FieldInfo>的填充方式:遍历Methods[],取出所有的set......
  • fastjson整理思路
    此处把常用的一些方法,简单做个记录。 做自动化时,我们发送一个请求,返回的是一个字符串。首先我们要把这个字符串转换为json对象  parseObject():将JSON字符串解析为Java对象。 Stringjson="{\"person\":{\"name\":\"Ivy\",\"age\":60}}";JSONO......
  • SpringMVC类型转换Converter使用
    Converter接口//S:表示接受的类型,T:表示目标类型publicinterfaceConverter<S,T>{/***实现类型转换的方法*/@NullableTconvert(Ssource);}自定义类型转换器/***@authorsongzixian*@create2019-07-23下午3:22*@description自定义类型转换器*/......
  • FastJson使用详解
    FastJson文章目录第一章FastJson使用详解这一篇就够了第二章FastJsonHttpMessageConverter类的作用与使用详解第三章Jackson使用详解文章目录FastJson文章目录前言一、FastJson是什么?二、使用步骤1.引入库2.序列化和反序列化Java对象3解析JSON字符串4使用注解......
  • fastjson
    fastjson一、fastjson简介fastjson是java的一个库,可以将java对象转化为json格式的字符串,也可以将json格式的字符串转化为java对象提供了toJSONString()和parseObject()方法来将Java对象与JSON相互转换。调用toJSONString方法即可将对象转换成JSON字符串,parseObject......
  • 功能强大的多功能文档转换工具Neevia Document Converter Pro 7.5.0.241
    NeeviaDocumentConverterPro是一款功能强大的Windows软件,旨在将文档转换为各种格式,包括PDF、TIFF、JPEG和许多其他格式。该程序专为在企业环境中使用而设计,提供文档转换和处理过程的自动化,这使其成为处理大量文档的组织的***工具。NeeviaDocumentConverterPro的主要功......