1.数字类型不能null或者""
直接使用Gson转,对于接受的int等类型为空时会保错,通过GsonBuilder解决
实体类 名称 = gson.fromJson(str, 实体类.class);
实体类 名称 = new GsonBuilder()
.registerTypeAdapter(Long.class, new LongDefaultNullAdapter())
.registerTypeAdapter(Integer.class, new IntegerDefaultNullAdapter())
.create().fromJson(str, 实体类.class);
其中IntegerDefaultNullAdapter为自定义类型
public class IntegerDefaultNullAdapter implements JsonSerializer<Integer>, JsonDeserializer<Integer> {
public Integer deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException {
try {
if (json.getAsString().equals("")) {
// 定义为Integer类型,如果后台返回"",则返回null
return null;
}
} catch (Exception ignore) {
}
try {
return json.getAsInt();
} catch (NumberFormatException e) {
throw new JsonSyntaxException(e);
}
}
public JsonElement serialize(Integer src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(src);
}
}
同理,解决Long,Double不为空,在registerTypeAdapter处添加对应的类
LongDefaultNullAdapter
public class LongDefaultNullAdapter implements JsonSerializer<Long>, JsonDeserializer<Long> {
public Long deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException {
try {
if (json.getAsString().equals("")) {
// 定义为Integer类型,如果后台返回"",则返回null
return null;
}
} catch (Exception ignore) {
}
try {
return json.getAsLong();
} catch (NumberFormatException e) {
throw new JsonSyntaxException(e);
}
}
public JsonElement serialize(Long src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(src);
}
}
DoubleDefaultNullAdapter
public class DoubleDefaultNullAdapter implements JsonSerializer<Double>, JsonDeserializer<Double> {
public Double deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException {
try {
if (json.getAsString().equals("")) {
// 定义为double类型,如果后台返回"",则返回null
return null;
}
} catch (Exception ignore) {
}
try {
return json.getAsDouble();
} catch (NumberFormatException e) {
throw new JsonSyntaxException(e);
}
}
public JsonElement serialize(Double src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(src);
}
}
2.解决时间问题
实体类 名称 = new GsonBuilder()
.setDateFormat("yyyy-MM-dd HH:mm:ss")
.registerTypeAdapter(Long.class, new LongDefaultNullAdapter())
.registerTypeAdapter(Integer.class, new IntegerDefaultNullAdapter())
.create().fromJson(str, 实体类.class);
通过.setDateFormat("yyyy-MM-dd HH:mm:ss")规定接受时间的格式
*该文章只用于记录自己工作时问题的解决过程,具体引用还得结合实际开发