FastJsonConfig config = new FastJsonConfig();
config.setSerializerFeatures(new SerializerFeature[]{
SerializerFeature.WriteDateUseDateFormat,
SerializerFeature.WriteBigDecimalAsPlain,
SerializerFeature.QuoteFieldNames,
SerializerFeature.PrettyFormat,
SerializerFeature.DisableCircularReferenceDetect});
[
{
"auditStatus":30,
"id":"03ff2fea48184cdaaafbfc4d74432f5b",
"name":"公司",
"updateTime":"2021-06-03 14:30:58"
}
]
反序列化成类时报错
@DaTa
public class CompanySimpleVo {
private String id;
private String name;
private Date updateTime;
}
com.alibaba.fastjson.parser.JSONScanner#scanFieldDate
`
ch = charAt(++bp);//ch可能是空字符串换行符制表符等字符,如果是这样空字符串换行符制表符等字符,后面 matchStat = NOT_MATCH,导致异常
if (ch == ',') {
token = JSONToken.COMMA;
this.ch = charAt(++bp);
} else if (ch == ']') {
token = JSONToken.RBRACKET;
this.ch = charAt(++bp);
} else if (ch == '}') {
token = JSONToken.RBRACE;
this.ch = charAt(++bp);
} else if (ch == EOI) {
token = JSONToken.EOF;
} else {
this.bp = startPos;
this.ch = startChar;
matchStat = NOT_MATCH;
return null;
}
matchStat = END;
`
4条答案
按热度按时间gupuwyp21#
版本号1.2.83
falq053o2#
`@Data
public class CompanyJsonBugTest {
}`
经过反复试验,当去掉字段其他字段只保留updateTime,可以成功,添加其他字段就报错,
com.alibaba.fastjson.parser.JSONScanner#scanFieldDate中调用scanISO8601DateIfMatch
token = JSONToken.LITERAL_ISO8601_DATE;
return true;
返回true 并将token 设置成JSONToken.LITERAL_ISO8601_DATE导致后续在com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer#deserialze(com.alibaba.fastjson.parser.DefaultJSONParser, java.lang.reflect.Type, java.lang.Object, java.lang.Object, int, int[])第439行成为true,下面直接抛出异常
控制台打印结果
[
{
"updateTime":"2022-09-29 13:51:36"
}
]
com.alibaba.fastjson.JSONException: syntax error, expect {, actual iso8601, pos 0, fastjson-version 1.2.83
lskq00tm3#
在以上代码基础上增加name字段
private String name;
运行正常
[
{
"name":"企业全称",
"updateTime":"2022-09-29 13:46:35"
}
]
[CompanyJsonBugTest(updateTime=Thu Sep 29 13:46:35 CST 2022, id=null, name=企业全称)]
z4bn682m4#
@wenshao 请帮忙看看