bug fix for deserialize none-default-constructor
Java CI / Test on JDK ${{ matrix.java }} OS ${{ matrix.os }} (11, macos-latest) (push) Waiting to run Details
Java CI / Test on JDK ${{ matrix.java }} OS ${{ matrix.os }} (11, ubuntu-20.04) (push) Waiting to run Details
Java CI / Test on JDK ${{ matrix.java }} OS ${{ matrix.os }} (11, windows-latest) (push) Waiting to run Details
Java CI / Test on JDK ${{ matrix.java }} OS ${{ matrix.os }} (17, macos-latest) (push) Waiting to run Details
Java CI / Test on JDK ${{ matrix.java }} OS ${{ matrix.os }} (17, ubuntu-20.04) (push) Waiting to run Details
Java CI / Test on JDK ${{ matrix.java }} OS ${{ matrix.os }} (17, windows-latest) (push) Waiting to run Details
Java CI / Test on JDK ${{ matrix.java }} OS ${{ matrix.os }} (21, macos-latest) (push) Waiting to run Details
Java CI / Test on JDK ${{ matrix.java }} OS ${{ matrix.os }} (21, ubuntu-20.04) (push) Waiting to run Details
Java CI / Test on JDK ${{ matrix.java }} OS ${{ matrix.os }} (21, windows-latest) (push) Waiting to run Details
Java CI / Test on JDK ${{ matrix.java }} OS ${{ matrix.os }} (8, macos-latest) (push) Waiting to run Details
Java CI / Test on JDK ${{ matrix.java }} OS ${{ matrix.os }} (8, ubuntu-20.04) (push) Waiting to run Details
Java CI / Test on JDK ${{ matrix.java }} OS ${{ matrix.os }} (8, windows-latest) (push) Waiting to run Details

This commit is contained in:
wenshao 2025-03-27 12:10:44 +08:00
parent 552091ef9e
commit fe81a4a85b
2 changed files with 50 additions and 22 deletions

View File

@ -1329,30 +1329,33 @@ public class ObjectReaderCreatorASM
// switch_default
mw.visitLabel(dflt);
Label fieldReaderNull_ = new Label();
boolean disableSmartMatch = context.disableSmartMatch();
if (!disableSmartMatch && !(context.objectReaderAdapter instanceof ObjectReaderNoneDefaultConstructor)) {
Label fieldReaderNull_ = new Label();
if ((readerFeatures & JSONReader.Feature.SupportSmartMatch.mask) == 0) {
if ((readerFeatures & JSONReader.Feature.SupportSmartMatch.mask) == 0) {
mw.aload(JSON_READER);
mw.lload(FEATURES);
mw.invokevirtual(TYPE_JSON_READER, "isSupportSmartMatch", "(J)Z");
mw.ifeq(fieldReaderNull_);
}
mw.aload(THIS);
mw.aload(JSON_READER);
mw.lload(FEATURES);
mw.invokevirtual(TYPE_JSON_READER, "isSupportSmartMatch", "(J)Z");
mw.ifeq(fieldReaderNull_);
mw.invokevirtual(TYPE_JSON_READER, "getNameHashCodeLCase", "()J");
mw.invokeinterface(TYPE_OBJECT_READER, "getFieldReaderLCase", METHOD_DESC_GET_FIELD_READER);
mw.dup();
mw.astore(FIELD_READER);
mw.ifnull(fieldReaderNull_);
mw.aload(FIELD_READER);
mw.aload(JSON_READER);
mw.aload(OBJECT);
mw.invokevirtual(TYPE_FIELD_READE, "readFieldValueJSONB", METHOD_DESC_READ_FIELD_VALUE);
mw.goto_(L_FOR_INC); // continue
mw.visitLabel(fieldReaderNull_);
}
mw.aload(THIS);
mw.aload(JSON_READER);
mw.invokevirtual(TYPE_JSON_READER, "getNameHashCodeLCase", "()J");
mw.invokeinterface(TYPE_OBJECT_READER, "getFieldReaderLCase", METHOD_DESC_GET_FIELD_READER);
mw.dup();
mw.astore(FIELD_READER);
mw.ifnull(fieldReaderNull_);
mw.aload(FIELD_READER);
mw.aload(JSON_READER);
mw.aload(OBJECT);
mw.invokevirtual(TYPE_FIELD_READE, "readFieldValueJSONB", METHOD_DESC_READ_FIELD_VALUE);
mw.goto_(L_FOR_INC); // continue
mw.visitLabel(fieldReaderNull_);
} else {
for (int i = 0; i < fieldReaderArray.length; ++i) {
Label next_ = new Label();
@ -1961,7 +1964,7 @@ public class ObjectReaderCreatorASM
mw.visitLabel(dflt);
if (!disableSmartMatch) {
if (!disableSmartMatch && !(context.objectReaderAdapter instanceof ObjectReaderNoneDefaultConstructor)) {
Label fieldReaderNull_ = new Label();
if ((readerFeatures & JSONReader.Feature.SupportSmartMatch.mask) == 0) {
mw.lload(FEATURES);

View File

@ -0,0 +1,25 @@
package com.alibaba.fastjson2.issues;
import com.alibaba.fastjson2.JSON;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class Issue3435 {
record Data6(int a, int b, int c, int d, int e, int f) {}
record Data7(int a, int b, int c, int d, int e, int f, int g) {}
@Test
public void test6() {
String s6 = "{\"a\":0,\"b\":0,\"c\":0,\"d\":0,\"e\":0,\"f\":0}";
Data6 d6 = JSON.parseObject(s6, Data6.class);
assertEquals("{\"a\":0,\"b\":0,\"c\":0,\"d\":0,\"e\":0,\"f\":0}", JSON.toJSONString(d6));
}
@Test
public void test7() {
String s7 = "{\"a\":0,\"b\":0,\"c\":0,\"d\":0,\"e\":0,\"f\":0,\"g\":0}";
Data7 d7 = JSON.parseObject(s7, Data7.class);
assertEquals("{\"a\":0,\"b\":0,\"c\":0,\"d\":0,\"e\":0,\"f\":0,\"g\":0}", JSON.toJSONString(d7));
}
}