Skip to content

Commit 4686c2c

Browse files
authored
Fix 2959 (#2960)
* fix consistent with declared orders when alphabetic is false, for issue #2959 * fix checkstyle
1 parent a627c5f commit 4686c2c

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,8 @@ public ObjectWriter createObjectWriter(
180180
}
181181

182182
long writerFieldFeatures = features | beanFeatures;
183-
final boolean fieldBased = (writerFieldFeatures & JSONWriter.Feature.FieldBased.mask) != 0 && !objectClass.isInterface();
183+
final boolean fieldBased = ((writerFieldFeatures & JSONWriter.Feature.FieldBased.mask) != 0 && !objectClass.isInterface())
184+
|| !beanInfo.alphabetic;
184185

185186
if (Throwable.class.isAssignableFrom(objectClass)
186187
|| BeanUtils.isExtendedMap(objectClass)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.alibaba.fastjson2.issues_2900;
2+
3+
import com.alibaba.fastjson2.JSON;
4+
import com.alibaba.fastjson2.JSONWriter;
5+
import com.alibaba.fastjson2.annotation.JSONType;
6+
import lombok.Data;
7+
import org.junit.jupiter.api.Test;
8+
9+
import java.math.BigDecimal;
10+
import java.util.Date;
11+
12+
import static org.junit.jupiter.api.Assertions.assertEquals;
13+
14+
public class Issue2959 {
15+
@Test
16+
public void test() {
17+
assertEquals("{\"projectNO\":null,\"orderNO\":null,\"orderType\":null,\"pN\":null,\"qty\":null,\"description\":null,\"customerCode\":null,\"customerName\":null,\"currency\":null,\"netPrice\":null,\"uSD\":null,\"rate\":null,\"orderDate\":null,\"requestDate\":null,\"planedDate\":null,\"this$0\":null}",
18+
JSON.toJSONString(new TobeDelivery(), JSONWriter.Feature.WriteNulls));
19+
}
20+
21+
@Data
22+
@JSONType(alphabetic = false)
23+
public class TobeDelivery {
24+
private String projectNO;
25+
private String orderNO;
26+
private String orderType;
27+
private String pN;
28+
private Integer qty;
29+
private String description;
30+
private String customerCode;
31+
private String customerName;
32+
private String currency;
33+
private BigDecimal netPrice;
34+
private BigDecimal uSD;
35+
private Float rate;
36+
private Date orderDate;
37+
private Date requestDate;
38+
private Date planedDate;
39+
}
40+
}

0 commit comments

Comments
 (0)