From 98dca0edb1ed0d05b1d49e56210e966946dad599 Mon Sep 17 00:00:00 2001 From: zhouz <> Date: Wed, 15 Jul 2026 17:59:10 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DSegmentConfig=20Jackso?= =?UTF-8?q?n=E5=A4=9A=E6=80=81=E5=BA=8F=E5=88=97=E5=8C=96type=E5=86=B2?= =?UTF-8?q?=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除SegmentConfig中与@JsonTypeInfo冲突的type字段 - buildSegment改用instanceof替代getType() - 避免序列化时type覆盖为null导致反序列化失败 --- .../base/service/codegen/CodeGenServiceImpl.java | 14 ++++++++------ .../base/service/codegen/dto/SegmentConfig.java | 12 ++++-------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/CodeGenServiceImpl.java b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/CodeGenServiceImpl.java index ba869821..5ca18d0b 100644 --- a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/CodeGenServiceImpl.java +++ b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/CodeGenServiceImpl.java @@ -61,12 +61,14 @@ public class CodeGenServiceImpl implements CodeGenService { * 根据段类型分发处理,生成段值 */ private String buildSegment(CodeRuleDO rule, SegmentConfig segment) { - return switch (segment.getType()) { - case "PREFIX" -> buildPrefixSegment((PrefixSegment) segment); - case "DATE" -> buildDateSegment((DateSegment) segment); - case "SEQUENCE" -> buildSequenceSegment(rule, (SequenceSegment) segment); - default -> throw new IllegalArgumentException("不支持的段类型: " + segment.getType()); - }; + if (segment instanceof PrefixSegment) { + return buildPrefixSegment((PrefixSegment) segment); + } else if (segment instanceof DateSegment) { + return buildDateSegment((DateSegment) segment); + } else if (segment instanceof SequenceSegment) { + return buildSequenceSegment(rule, (SequenceSegment) segment); + } + throw new IllegalArgumentException("不支持的段类型: " + segment.getClass().getSimpleName()); } /** diff --git a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/dto/SegmentConfig.java b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/dto/SegmentConfig.java index 495bbf56..df20c511 100644 --- a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/dto/SegmentConfig.java +++ b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/dto/SegmentConfig.java @@ -5,22 +5,18 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; import lombok.Data; /** - * 分段配置基类,使用 Jackson 多态序列化/反序列化 + * 分段配置基类,使用 Jackson 多态序列化/反序列化。 + * 注意:type 字段由 @JsonTypeInfo 自动管理,不要在子类中重复定义, + * 否则会导致序列化时 type 被覆盖为 null,反序列化时找不到子类型。 * * @author zhouz */ @Data -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type") +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type", visible = true) @JsonSubTypes({ @JsonSubTypes.Type(value = PrefixSegment.class, name = "PREFIX"), @JsonSubTypes.Type(value = DateSegment.class, name = "DATE"), @JsonSubTypes.Type(value = SequenceSegment.class, name = "SEQUENCE") }) public abstract class SegmentConfig { - - /** - * 段类型:PREFIX / DATE / SEQUENCE - */ - private String type; - }