今天想分享一些工作中遇到的关于gson的坑,这么说其实不太准确,因为不能算是gson的坑,更多的是因为旧代码产生了一些不规范的数据导致使用gson时遇到了一些问题。...gson简介 可能有的同学不了解gson,所以在分享坑之前先来介绍一下gson,已经熟练使用gson的同学可以直接跳到下一部分了。...JSON互相转换 对Java的泛型支持的很好 允许自定义一些对象的表现形式 支持复杂对象的序列化 使用gson 那现在我们就来体验一下gson的第一个特性,使用简单。...在使用gson之前,我们需要添加依赖,我们的项目中使用的是Maven管理依赖,所以会在pom.xml文件中插入以下代码: com.google.code.gson...那现在我们已经学会gson的基础用法了,接下来就进入正题,分享几个我在使用过程中遇到的实际问题以及解决方案。
今天想分享一些工作中遇到的关于gson的坑,这么说其实不太准确,因为不能算是gson的坑,更多的是因为旧代码产生了一些不规范的数据导致使用gson时遇到了一些问题。...gson简介 可能有的同学不了解gson,所以在分享坑之前先来介绍一下gson,已经熟练使用gson的同学可以直接跳到下一部分了。...JSON互相转换 对Java的泛型支持的很好 允许自定义一些对象的表现形式 支持复杂对象的序列化 使用gson 那现在我们就来体验一下gson的第一特性,使用简单。...在使用gson之前,我们需要添加依赖,我们的项目中使用的是Maven管理依赖,所以会在pom.xml文件中插入以下代码: com.google.code.gson...那现在我们已经学会gson的基础用法了,接下来就进入正题,分享几个我在使用过程中遇到的实际问题以及解决方案。
前言 感慨:Retrofit2 虽好,但是,有时候总感觉 Java 这门语言还是美中不足啊!...() { Gson gson = new GsonBuilder().registerTypeAdapterFactory(provideParamsAdapterFactory...TypeAdapterFactory),并注册到了 GsonBuilder 中。...使用场景 这个,我一开始也没提。...@Override public TypeAdapter create(Gson gson, TypeToken typeToken) { Class rawType
Retrofit2 是目前Android开发主流的网络库,RxJava2也是目前开发者使用的比较多用来更优雅实现异步的库,因为最近业务需求有用到这两个库,就简单分享下它的一个实际使用场景—上传文件 [TOC...] 集成RxJava2和Retrofit2 // Rx compile rootProject.ext.dependencies["rxjava"] compile rootProject.ext.dependencies...gson = new Gson(); for (File file : files) { UploadFileRequestBody uploadFileRequestBody...的Observer的抽象类,主要是用来收到Rxjava2的事件: /** * 上传文件的RxJava2回调...总结 通篇代码实现很多,但可以看到使用Retrofit2和RxJava2的结合起来使用还是挺方便的,再也不用自己去控制线程的切换了,也不用去关注http的具体实现,少写了不少代码,实现起来也优雅不少,希望这篇文章能帮助到大家
Number类型盲转Double Gson是一个源自谷歌的JSON序列化/反序列化框架,出身名门,社区活跃,因此被广泛应用。 ? 不过在项目中使用下来,发现Gson有一个比较坑的问题。...来看一下ObjectTypeAdapter中是如何处理的? public final class ObjectTypeAdapter extends TypeAdapter // ......FACTORY = new TypeAdapterFactory() { public TypeAdapter create(Gson gson, TypeToken type...当然,在使用Gson时,需要先注册这个自定义的类型解析器。...import com.google.gson.Gson; import com.google.gson.TypeAdapter; import com.google.gson.TypeAdapterFactory
可以直接 new 创建默认配置的 Gson 对象,也可以使用 GsonBuilder 构造者配置 Gson 对象。...在序列化时,首先使用反射获取字段值,再使用字段的 BoundFiled 序列化; 在反序列化时,首先创建对象实例(下文会讨论如何创建),再使用依次使用字段的 BoundField 反序列为字段类型的值,...的策略是使用 ThreadLocal 隔离各个线程的临时映射表。...(); } } } 2.5 Gson 是如何创建对象的?...Gson 如何解析泛型类型?
本文链接 OkHttp + Retrofit使用示例。从引入依赖,编写接口,到发起网络请求。...https://github.com/square/okhttp 简单使用 引入依赖 引入依赖,使用Retrofit2。...gson = new Gson(); String bodyJson = gson.toJson(map); RequestBody requestBody = RequestBody.create(...osVersion, @Query("submitContent") String content); 示例1 - Retrofit2...,RxJava2 引入依赖 implementation 'com.squareup.retrofit2:retrofit:2.5.0' implementation 'com.squareup.retrofit2
return obj; } public void setObj(Object obj) { this.obj = obj; } } 我用的是Retrofit2...+ Rxjava2。...然后直接把这个value值转换成对象,然后去拿数据: 继续使用GsonFormat插件,把{'公司简称':[],'年份列表':["2016","2015","2014"]}扔进去,然后生成对象类。...然后我们就直接把 Gson gson = new Gson(); BYearBean subBean = gson.fromJson(bean.getMsg().replace("\\",""),BYearBean.class...subEntry.getKey())){ JsonArray array = subEntry.getValue().getAsJsonArray(); ArrayList years = gson.fromJson
的过程中受到了一些阻力,现 Retrofit2 学会使用了,特此写此文验证所学知识。...先看看如何使用,如何进行一个简单的Get/Post请求 Retrofit2 入门 首先在build.gradle中添加如下代码,添加Retrofit2库 compile 'com.squareup.retrofit2...请看: 添加 在Retrofit2中是用Gson解析的,所以我们要在build.gradle中添加。...//使用 Call call=url.send(); 这里的UserInfo就是要发送的实体,Retrofit2 会自动转成Gson 学到这里,一般的网络请求都可以了进行,可以应付一阵子了...独断万古 首先说下如何和当前火热的RxJava进行配合使用。
Gson使用指南(四) 中说当你了解了注解、反射、泛型、HTTP的内容只需要看一篇Retrofit的代码示例就可以轻松玩转Retrofit,不知道你玩转了没?...Gson使用指南》 系列。...4、RxJava与CallAdapter 说到Retrofit就不得说到另一个火到不行的库RxJava,网上已经不少文章讲如何与Retrofit结合,但这里还是会有一个RxJava的例子,不过这里主要目的是介绍使用...6、自定义CallAdapter 本节将介绍如何自定一个CallAdapter,并验证是否所有的String都会使用我们第5节中自定义的Converter。...responseType; } @Override public CustomCall adapt(Call call) { // 由 CustomCall 决定如何使用
使用gson代替fastjson 为什么使用gson代替fastjson呢? 我主要是出于以下两点考虑: fastjson之前就经常爆出了好几次比较严重的安全漏洞, 安全性方面存在缺陷....目前Android项目使用gson的居多, 并且是Google开源维护的,充分相信Google的实力....下面我简单列举一下: 类型安全: ViewBinding会基于布局中的View生成类型正确的属性。...gson代替了fastjson, 因此混淆配置需要进行修改. 3.2.0及以上版本,使用的是gson进行序列化的,所以配置如下: # gson -keepattributes Signature -keepattributes...} -keep class * extends com.google.gson.TypeAdapter -keep class * implements com.google.gson.TypeAdapterFactory
:18} 2、暴露序列化注解@Expose 使用此注解时就可以选择性的序列化类的属性,前面介绍的方法都是直接使用new Gson(),toJson()和fromJson()方法,这会将全部的字段序列化或反序列化...public final class ObjectTypeAdapter extends TypeAdapter { public static final TypeAdapterFactory...所以想在不改变源码的基础上,实现数值类型的正确转换,需要新增一个适配器。...另外一点可以看出当类型为BEGIN_OBJECT时ObjectTypeAdapter返回的Gson自定义的map类型LinkedTreeMap,如果使用时用到强转为HashMap会报错,由于我们使用的都是...Gson核心jar包不到1M,非常精简,但提供的功能无疑是非常强大的,如果使用JDK自带的JSON解析API,使用起来相对比较繁琐一点,而且代码量较多,推荐大家可以尝试使用。
大部分基本类型的TypeAdapter都有一个TypeAdapterFactory:例如MapTypeAdapterFactory主要用于解析map类型的数据:对于类似自定义User的解析,一般情况下会在...ReflectiveTypeAdapterFactory进行处理,查看其read方法的实现,首先如果 JSON 值不为 NULL,方法使用 this.constructor.construct() 创建新...然后使用 while 循环遍历 JSON 对象中的所有字段。...0x02 参数走私场景当使用ReflectiveTypeAdapterFactory处理时,如果在set操作时使用了已存在的键,则新值会替换旧值,原有的键值对会被新的键值对覆盖。...b"activityId"额外认为是一个独立的键,而取到了前者,而fastjson因为忽略了无关的\b仍正常解析获取到了后者,利用这一点差异完成了参数走私:此外,在将JSON反序列化成Java对象时没有正确的解析时
混合后的类名为小写 -dontusemixedcaseclassnames # 指定不去忽略非公共库的类 -dontskipnonpubliclibraryclasses # 这句话能够使我们的项目混淆后产生映射文件...# 包含有类名->混淆后类名的映射关系 -verbose # 指定不去忽略非公共库的类成员 -dontskipnonpubliclibraryclassmembers # 不做预校验,preverify...# Gson -keepattributes Signature -keepattributes *Annotation* -dontwarn sun.misc.** -keep class com.google.gson.examples.android.model....** { ; } -keep class * implements com.google.gson.TypeAdapterFactory -keep class * implements...com.google.gson.JsonSerializer -keep class * implements com.google.gson.JsonDeserializer -keepclassmembers
Spring Boot中使用Swagger CodeGen生成REST client Swagger是一个非常好用的API工具,我们会使用Swagger来暴露API给外界测试,那么有没有简单的办法来生成对应的调...本文我们将会举例说明如何通过OpenAPI 规范定义文件自动生成REST Client。 什么是Open API规范定义文件呢?...正确定义后,使用者可以使用最少的实现逻辑来理解远程服务并与之交互。...然后,文档生成工具可以使用OpenAPI定义来显示API,代码生成工具可以使用各种编程语言,测试工具和许多其他用例来生成服务器和客户端。...– OkHttp + Gson retrofit (Obsolete) – Retrofit1/OkHttp + Gson retrofit2 – Retrofit2/OkHttp + Gson rest-template
Gson来解析,以及网络请求的异步回调 NetCallback 我们不直接使用OkHttp提供的Callback 而是在内部简单的做了封装转换成项目自己的NetCallback,因为对项目的开发人员来说...package retrofit2; import java.lang.annotation.Annotation; import java.lang.reflect.InvocationHandler...,当用户设置了不同的注解,在内部我们使用OKHttp调用相应的方法。...3.4 实现ConverterFactory 解耦Json转换 在上面的例子中,我们直接在框架Retrofit中使用了Gson库做Json转换,但作为一个框架来说 我们不希望直接强耦合一个第三方Json...这个功能相当于让Retrofit框架支持 对方法返回类型的自定义适配,和Converter接口一样的思路,我们在框架可以定义一个 CallAdapter接口,让应用层来具体实现并传入 package retrofit2
RxJavaCallAdapterFactory.create(); } @Override public Converter.Factory createGsonConverterFactory() { Gson...gson = new GsonBuilder().registerTypeAdapterFactory(provideParamsAdapterFactory()).create();...return GsonConverterFactory.create(gson); } private TypeAdapterFactory provideParamsAdapterFactory...T provideApi(Class service) { return mRetrofitWrapper.getRetrofit().create(service); } } 如何调用
但是自从升级了Retrofit2之后,就可以不用手动导入了,因为已经自己引入了。...:2.0.2' compile 'com.google.code.gson:gson:2.7' compile 'com.squareup.okhttp3:logging-interceptor...:3.4.1' } 可以看到,我上面引入了Retrofit2的库 compile 'com.squareup.retrofit2:retrofit:2.2.0' 但是除了这个份之外,我还引入了其他的...这两个,是在从请求Json数据到Bean需要使用到的。...依赖了谷歌的Gson库 compile 'com.squareup.retrofit2:converter-gson:2.0.2' compile 'com.google.code.gson:gson:
在Retrofit1中使用的是RestAdapter,而Retrofit2中使用的Retrofit实例,之前的setEndpoint变为了baseUrl。...Retrofit2通过OKHttp的拦截器拦截http请求进行监控,重写或重试等,包括日志打印等。...参考:官方CHANGELOG.md 更新到Retrofit2的一些技巧 1.9使用配置 //gson converter final static Gson gson = new GsonBuilder...> adapter = gson.getAdapter(TypeToken.get(type)); return new GsonResponseBodyConverter(gson, adapter...> adapter = gson.getAdapter(TypeToken.get(type)); return new GsonRequestBodyConverter(gson, adapter
功能说明 本文将采用Get方法对 金山词霸API 按规定时间 重复发送网络请求,从而模拟 轮询 需求实现 采用 Gson 进行数据解析 3....在 Gradle加入Retrofit库的依赖 build.gradle dependencies { // Android 支持 Rxjava // 此处一定要注意使用RxJava2的版本 compile...RxJava2的版本 compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0' // 支持Gson解析 compile 'com.squareup.retrofit2...:converter-gson:2.1.0' } b....Demo地址 Carson_Ho的Github地址 = RxJava2实战系列:轮询 5.