alibaba / fastjson2

🚄 FASTJSON2 is a Java JSON library with excellent performance.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[BUG] JSONB.toBytes with org.joda.time.DateTime

Cooper-Zhong opened this issue · comments

问题描述

JSONB.toBytes时无法处理org.joda.time.DateTime字段

环境信息

  • OS信息: [MacOS 12.7.4 M1 Pro 16 GB]
  • JDK信息: [Openjdk 17.0.6]
  • 版本信息:[Fastjson2 2.0.50-SNAPSHOT]

重现步骤

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONB;
import org.joda.time.DateTime;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class MutatedIssue2332_567 {

    DateTime nowD = new DateTime(2018, 7, 14, 12, 13, 14, 0);

    @Test
    public void mutatedTest0() {
        Bean0 entity = new Bean0();
        entity.setNow(nowD);

        String json = JSON.toJSONString(entity);
        Bean0 bean0 = JSON.parseObject(json, Bean0.class);
        assertEquals(entity.now, bean0.now);
    }

    @Test
    public void mutatedTest1() {
        Bean0 entity = new Bean0();
        entity.setNow(nowD);

        byte[] jsonbBytes = JSONB.toBytes(entity);
        Bean0 bean0 = JSONB.parseObject(jsonbBytes, Bean0.class);
        assertEquals(entity.now, bean0.now);
    }


    @Data
    public static class Bean0 {
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private DateTime now;
    }

}

相关日志输出

java.lang.ClassCastException: class org.joda.time.DateTime cannot be cast to class java.time.ZonedDateTime (org.joda.time.DateTime is in unnamed module of loader 'app'; java.time.ZonedDateTime is in module java.base of loader 'bootstrap')
at com.alibaba.fastjson2.writer.ObjectWriterImplZonedDateTime.writeJSONB(ObjectWriterImplZonedDateTime.java:31)
at com.alibaba.fastjson2.writer.OWG_1_1_Bean0.writeJSONB(Unknown Source)
at com.alibaba.fastjson2.JSONB.toBytes(JSONB.java:1155)
at MutatedIssue2332_567.mutatedTest1(MutatedIssue2332_567.java:32)

验证已修复,辛苦wenshao