Skip to content

Commit 49f44e3

Browse files
committed
fix: resolve conflict where global Date writer overrides @JSONField format, for issue #3864
1 parent 73df32d commit 49f44e3

2 files changed

Lines changed: 39 additions & 1 deletion

File tree

core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterCreator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -819,7 +819,7 @@ public <T> FieldWriter<T> createFieldWriter(
819819
// ignored
820820
}
821821

822-
if (initObjectWriter == null && provider != null) {
822+
if (initObjectWriter == null && provider != null && (format == null || format.isEmpty() || fieldClass != Date.class)) {
823823
initObjectWriter = getInitWriter(provider, fieldClass);
824824
}
825825

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.alibaba.fastjson2.issues_3800;
2+
3+
import com.alibaba.fastjson2.JSON;
4+
import com.alibaba.fastjson2.JSONFactory;
5+
import com.alibaba.fastjson2.annotation.JSONField;
6+
import com.alibaba.fastjson2.writer.ObjectWriterProvider;
7+
import lombok.Data;
8+
import org.junit.jupiter.api.Test;
9+
10+
import java.util.Date;
11+
12+
import static org.junit.jupiter.api.Assertions.assertEquals;
13+
14+
public class Issue3864 {
15+
@Test
16+
public void testSerializationPriority() {
17+
ObjectWriterProvider provider = JSONFactory.getDefaultObjectWriterProvider();
18+
try {
19+
provider.register(Date.class, (jsonWriter, o, o1, type, l) -> jsonWriter.writeInt64(((Date) o).getTime()));
20+
21+
CustomDateDo dateDo = new CustomDateDo();
22+
dateDo.setDate(new Date(1673861993477L));
23+
dateDo.setDate2(new Date(1673861993477L));
24+
25+
String json = JSON.toJSONString(dateDo);
26+
assertEquals("{\"date\":1673861993477,\"date2\":\"2023-01-16 17:39:53\"}", json);
27+
} finally {
28+
provider.unregister(Date.class);
29+
}
30+
}
31+
32+
@Data
33+
public static class CustomDateDo {
34+
private Date date;
35+
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
36+
private Date date2;
37+
}
38+
}

0 commit comments

Comments
 (0)