在使用Google的Gson时,有两处需要注意:
1.获取不存在的属性并得到目标类型时
例如:JsonObject jo = new JsonObject(); jo.get("name").getAsString(),如果name属性不存在,那么将会抛空指针异常;解决办法为:①。先判断是否存在该字段,jo.has("name") ②。如果存在再转换,如果不存在可以手动设置值。
2.前端传入的json串与后端接收的bo字段名相同,类型不同时,会出现转换异常
例如:json为{"status":"", "id":"1"},bo为:private Byte status,Long id; 此时调用new Gson().fromJson(json, bo.class)会出现转换问题,解决方法为:重写映射规则,实现JsonDeserializer<Integer>接口。
public class IntegerDefaultValueAdapter implements JsonDeserializer<Integer> { @Override public Integer deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { if (StringUtils.isBlank(jsonElement.getAsString())) { return null; // 返回业务需要的值 } return jsonElement.getAsInt(); } } |