前言
这里纯属吐槽下,最近移动办公加班比平时上班还猛,凌晨1点的讨论技术,处理开发bug,太难了。
步入正题,昨天遇到一个bug,就是数据库是json类型的,然后我一如既往的负责开发公共解析接口,供大家使用,为人民服务。
问题前因后果
我使用Fastjson来进行序列化对象,然后set到redis,还有反序列化嘛。
Fastjson 坑 first
JSON.toJsonString(xx)
我发现转完之后再次去解析一直报错。后面发现是时间序列化有问题,就是2020-02-23 10:11:00 ,转完之后一直变成时间戳了。自然反序列化回对象Date类型就gg。
处理方案
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date startTime;
Gson 坑 number 1
有些字段传空的过来,恰好那个字段是Integer或者Long类型那就扑街了~
这时它是String转Integer或者Long,当然框架没有像人那么灵活自动转换
处理方案
public class IntegerTypeAdapter extends TypeAdapter<Integer> {
@Override
public Integer read(JsonReader reader) throws IOException {
if(reader.peek() == JsonToken.NULL){
reader.nextNull();
return null;
}
String stringValue = reader.nextString();
try{
return Integer.valueOf(stringValue);
}catch(NumberFormatException e){
return null;
}
}
@Override
public void write(JsonWriter writer, Integer value) throws IOException {
if (value == null) {
writer.nullValue();
return;
}
writer.value(value);
}
}
Long的设配器也是改下类型就obk了。
其次是配置Gson咯。
Gson gson = new GsonBuilder()
.registerTypeAdapter(Long.class, new LongTypeAdapter())
.registerTypeAdapter(Integer.class, new IntegerTypeAdapter())
.create();