Skip to content

Commit 097f637

Browse files
committed
JSON.toJSON support JSONField#format
1 parent 42aaf6d commit 097f637

File tree

2 files changed

+59
-5
lines changed

2 files changed

+59
-5
lines changed

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

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44
import com.alibaba.fastjson2.codec.FieldInfo;
55
import com.alibaba.fastjson2.filter.*;
66
import com.alibaba.fastjson2.util.BeanUtils;
7+
import com.alibaba.fastjson2.util.DateUtils;
78
import com.alibaba.fastjson2.util.Fnv;
89
import com.alibaba.fastjson2.util.TypeUtils;
910

1011
import java.lang.reflect.Field;
1112
import java.lang.reflect.Type;
12-
import java.util.Arrays;
13-
import java.util.Collection;
14-
import java.util.List;
15-
import java.util.Map;
13+
import java.time.LocalDate;
14+
import java.time.LocalDateTime;
15+
import java.util.*;
1616

1717
import static com.alibaba.fastjson2.JSONB.Constants.BC_TYPED_ANY;
1818
import static com.alibaba.fastjson2.JSONWriter.Feature.*;
@@ -590,6 +590,19 @@ public JSONObject toJSONObject(T object) {
590590
for (int i = 0; i < fieldWriters.size(); i++) {
591591
FieldWriter fieldWriter = fieldWriters.get(i);
592592
Object fieldValue = fieldWriter.getFieldValue(object);
593+
String format = fieldWriter.format;
594+
Class fieldClass = fieldWriter.fieldClass;
595+
if (format != null) {
596+
if (fieldClass == Date.class) {
597+
fieldValue = DateUtils.format((Date) fieldValue, format);
598+
} else if (fieldClass == LocalDate.class) {
599+
fieldValue = DateUtils.format((LocalDate) fieldValue, format);
600+
} else if (fieldClass == LocalDateTime.class) {
601+
fieldValue = DateUtils.format((LocalDateTime) fieldValue, format);
602+
} else if (fieldClass == LocalDate.class) {
603+
fieldValue = DateUtils.format((LocalDate) fieldValue, format);
604+
}
605+
}
593606

594607
long fieldFeatures = fieldWriter.features;
595608
if ((fieldFeatures & FieldInfo.UNWRAPPED_MASK) != 0) {
@@ -600,7 +613,7 @@ public JSONObject toJSONObject(T object) {
600613

601614
ObjectWriter fieldObjectWriter = fieldWriter.getInitWriter();
602615
if (fieldObjectWriter == null) {
603-
fieldObjectWriter = JSONFactory.getDefaultObjectWriterProvider().getObjectWriter(fieldWriter.fieldClass);
616+
fieldObjectWriter = JSONFactory.getDefaultObjectWriterProvider().getObjectWriter(fieldClass);
604617
}
605618
List<FieldWriter> unwrappedFieldWriters = fieldObjectWriter.getFieldWriters();
606619
for (int j = 0; j < unwrappedFieldWriters.size(); j++) {
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.alibaba.fastjson.issue_1600;
2+
3+
import com.alibaba.fastjson2.JSONObject;
4+
import com.alibaba.fastjson2.annotation.JSONField;
5+
import com.alibaba.fastjson2.util.DateUtils;
6+
import org.junit.jupiter.api.Test;
7+
8+
import java.time.LocalDateTime;
9+
import java.time.ZonedDateTime;
10+
import java.util.Date;
11+
12+
import static org.junit.jupiter.api.Assertions.assertEquals;
13+
14+
public class Issue1620 {
15+
@Test
16+
public void test() {
17+
Bean bean = new Bean();
18+
LocalDateTime ldt = LocalDateTime.of(2023, 7, 25, 18, 33, 28);
19+
bean.birthday = new Date(ZonedDateTime.of(ldt, DateUtils.SHANGHAI_ZONE_ID).toInstant().toEpochMilli());
20+
JSONObject jsonObject = JSONObject.from(bean);
21+
assertEquals("2023-07-25", jsonObject.get("birthday"));
22+
}
23+
24+
public static class Bean {
25+
@JSONField(format = "yyyy-MM-dd")
26+
public Date birthday;
27+
}
28+
29+
@Test
30+
public void test1() {
31+
Bean1 bean = new Bean1();
32+
bean.birthday = LocalDateTime.of(2023, 7, 25, 18, 33, 28);
33+
JSONObject jsonObject = JSONObject.from(bean);
34+
assertEquals("2023-07-25", jsonObject.get("birthday"));
35+
}
36+
37+
public static class Bean1 {
38+
@JSONField(format = "yyyy-MM-dd")
39+
public LocalDateTime birthday;
40+
}
41+
}

0 commit comments

Comments
 (0)