后端返回了N多枚举,前端Gson解析报错?
后端接口返回很多枚举,Android复用实体,解析时却报错
1 | com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: |
先定义一个枚举例子 Type.java
1 | public enum Type{ |
在序列化时服务端有两种试返回
1、完整返回枚举
1 | {"type":{"code":0,"name":"Gson"}} |
2、序列化code或name
1 | {"type":0} |
最好的解决办法——解决提出问题的人
很不幸后端是我负责的,所以我们有三个解决方法
1、让前端自己解决
2、为前端提供技术方案
3、修改后端枚举
我应该怎么办?
以上,当然是认怂,直接奉上代码喽
Json是一种广泛使用的数据交换格式,在Java中序列化和反序列化的各API名称也都类似,下面正式介绍Gson如何序列化、反序列化枚举
实现JsonSerializer/JsonDeserializer
序列化及反序列化如何实现
实现JsonSerializer/JsonDeserializer,在序列化和反序列化时会调用重载的serialize、deserialize方法
1 | import com.google.gson.JsonDeserializationContext; |
registerTypeAdapter
还需要将上面的Serializer注册到Gson中
1 | new GsonBuilder() |
解析
经过以上步骤后就解决了枚举序列化和反序列化问题
gson.fromJson时遇到枚举Type类型会调用TypeSerializer中的serialize方法
gson.toJson时遇到要解析枚举Type类型时会调用TypeSerializer中的deserialize方法