使用json.parseArray报错:
com.alibaba.fastjson.JSONException: default constructor not found. class com.google.common.collect.Range
at com.alibaba.fastjson.util.JavaBeanInfo.build(JavaBeanInfo.java:467)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.<init>(JavaBeanDeserializer.java:48)
at com.alibaba.fastjson.parser.ParserConfig.createJavaBeanDeserializer(ParserConfig.java:727)
at com.alibaba.fastjson.parser.ParserConfig.getDeserializer(ParserConfig.java:582)
at com.alibaba.fastjson.parser.ParserConfig.getDeserializer(ParserConfig.java:393)
at com.alibaba.fastjson.parser.deserializer.FastjsonASMDeserializer_7_xxxDTO.deserialze(Unknown Source)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:267)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:747)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:681)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:676)
at com.alibaba.fastjson.JSON.parseArray(JSON.java:535)
原因是json反序列化需要public的无参构造方法,而这里解析的类包含了com.google.common.collect.Range,它的构造方法如下:
private Range(Cut<C> lowerBound, Cut<C> upperBound) {
this.lowerBound = (Cut)Preconditions.checkNotNull(lowerBound);
this.upperBound = (Cut)Preconditions.checkNotNull(upperBound);
if (lowerBound.compareTo(upperBound) > 0 || lowerBound == Cut.aboveAll() || upperBound == Cut.belowAll()) {
throw new IllegalArgumentException("Invalid range: " + toString(lowerBound, upperBound));
}
}
既为私有又有参数,因此无法解析。