fastjson2 icon indicating copy to clipboard operation
fastjson2 copied to clipboard

[BUG] 当有 Provider::register 类型处理后,@JSONField 注解失效了(不知道算不算bug)

Open noear opened this issue 1 month ago • 1 comments

不知道是不是 bug(也可能是使用方式有问题)。这是复现的代码(可以直接 copy 运行):

public class FormatTest {
    public static void main(String[] args) {
        //
        // 当有 Provider::register 类型处理后,@JSONField 注解失效了
        //
        JSONWriter.Context context = new JSONWriter.Context();
        context.getProvider().register(Date.class, new ObjectWriter() {
            @Override
            public void write(JSONWriter jsonWriter, Object o, Object o1, Type type, long l) {
                jsonWriter.writeInt64(((Date) o).getTime());
            }
        });

        CustomDateDo dateDo = new CustomDateDo();

        dateDo.setDate(new Date(1673861993477L));
        dateDo.setDate2(new Date(1673861993477L));

        String json = JSON.toJSONString(dateDo, context);
        System.out.println(json); //{"date":1673861993477,"date2":1673861993477}

        Assertions.assertEquals("{\"date\":1673861993477,\"date2\":\"2023-01-16 17:39:53\"}", json);
    }

    public static class CustomDateDo {
        private Date date;

        @JSONField(format = "yyyy-MM-dd HH:mm:ss")
        private Date date2;

        public void setDate(Date date) {
            this.date = date;
        }

        public void setDate2(Date date2) {
            this.date2 = date2;
        }

        public Date getDate() {
            return date;
        }

        public Date getDate2() {
            return date2;
        }
    }
}

noear avatar Nov 06 '25 02:11 noear

可能是 bug,试了下@JSONField(serializeUsing = CustomDateWriter.class)字段序列化器优先级是大于全局配置的。

jujn avatar Nov 06 '25 07:11 jujn