0
String data = "{\"categoryId\":\"95251ca6dca34ae0be20b567ee59258c\",\"offset\":0,\"limit\":10,\"startTime\":\"2018-09-26T16:00:00.000Z\",\"endTime\":\"2018-10-21T16:00:00.000Z\"}";
System.out.println(JSON.parseObject(data, CsChatVuiQueryDto.class, Feature.AllowISO8601DateFormat));
data = "{\"categoryId\":\"95251ca6dca34ae0be20b567ee59258c\",\"limit\":10,\"offset\":0,\"startTime\":\"2018-09-26T16:00:00.000Z\",\"endTime\":\"2018-10-21T16:00:00.000Z\"}";
System.out.println(JSON.parseObject(data, CsChatVuiQueryDto.class, Feature.AllowISO8601DateFormat));
如上面的代码,第一个json是可以解析成功的,第二个却报异常,不同之处在于offset和limit的顺序,按理来说,不应该有顺序区分的。
执行异常结果如下:
Exception in thread "main" com.alibaba.fastjson.JSONException: syntax error, expect {, actual iso8601, pos 0, fastjson-version 1.2.38
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:450)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.parseRest(JavaBeanDeserializer.java:1231)
at com.alibaba.fastjson.parser.deserializer.FastjsonASMDeserializer_1_CsChatVuiQueryDto.deserialze(Unknown Source)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:270)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:626)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:348)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:252)
Bean:
@Getter
@Setter
@ToString
public class CsChatVuiQueryDto extends CsPageDto {
/**
* 分类ID
*/
private String categoryId;
/**
* 问题
*/
private String question;
/**
* 回答
*/
private String answer;
/**
* 开始时间
*/
private Date startTime;
/**
* 结束时间
*/
private Date endTime;
}
@Setter
@ToString
public class CsPageDto {
private static final int DEFAULT_OFFSET = 0;
private static final int DEFAULT_LIMIT = 10;
/**
* 偏移量
*/
private Integer offset;
/**
* 限制数目
*/
private Integer limit;
public Integer getOffset() {
return Optional.ofNullable(offset).orElse(DEFAULT_OFFSET);
}
public Integer getLimit() {
return Optional.ofNullable(limit).orElse(DEFAULT_LIMIT);
}
}