[alibaba/fastjson]JSON字段顺序影响解析结果,导致异常

2025-10-31 946 views
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);
    }
}

回答

5

升级到1.2.49试试看?

2

升级到1.2.49试试看?

问题已解决。

4

升级到1.2.49试试看?

问题已解决。

请问这是什么原因造成的?你又是通过什么方法解决的?期待你的答复,感激不尽~

4

是因为参数位置不正确导致的吗?