fix: 修复SegmentConfig Jackson多态序列化type冲突

- 移除SegmentConfig中与@JsonTypeInfo冲突的type字段
- buildSegment改用instanceof替代getType()
- 避免序列化时type覆盖为null导致反序列化失败
This commit is contained in:
zhouz
2026-07-15 17:59:10 +08:00
parent 9ecf5f6582
commit 98dca0edb1
2 changed files with 12 additions and 14 deletions

View File

@@ -61,12 +61,14 @@ public class CodeGenServiceImpl implements CodeGenService {
* 根据段类型分发处理,生成段值 * 根据段类型分发处理,生成段值
*/ */
private String buildSegment(CodeRuleDO rule, SegmentConfig segment) { private String buildSegment(CodeRuleDO rule, SegmentConfig segment) {
return switch (segment.getType()) { if (segment instanceof PrefixSegment) {
case "PREFIX" -> buildPrefixSegment((PrefixSegment) segment); return buildPrefixSegment((PrefixSegment) segment);
case "DATE" -> buildDateSegment((DateSegment) segment); } else if (segment instanceof DateSegment) {
case "SEQUENCE" -> buildSequenceSegment(rule, (SequenceSegment) segment); return buildDateSegment((DateSegment) segment);
default -> throw new IllegalArgumentException("不支持的段类型: " + segment.getType()); } else if (segment instanceof SequenceSegment) {
}; return buildSequenceSegment(rule, (SequenceSegment) segment);
}
throw new IllegalArgumentException("不支持的段类型: " + segment.getClass().getSimpleName());
} }
/** /**

View File

@@ -5,22 +5,18 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
import lombok.Data; import lombok.Data;
/** /**
* 分段配置基类,使用 Jackson 多态序列化/反序列化 * 分段配置基类,使用 Jackson 多态序列化/反序列化
* 注意type 字段由 @JsonTypeInfo 自动管理,不要在子类中重复定义,
* 否则会导致序列化时 type 被覆盖为 null反序列化时找不到子类型。
* *
* @author zhouz * @author zhouz
*/ */
@Data @Data
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type") @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type", visible = true)
@JsonSubTypes({ @JsonSubTypes({
@JsonSubTypes.Type(value = PrefixSegment.class, name = "PREFIX"), @JsonSubTypes.Type(value = PrefixSegment.class, name = "PREFIX"),
@JsonSubTypes.Type(value = DateSegment.class, name = "DATE"), @JsonSubTypes.Type(value = DateSegment.class, name = "DATE"),
@JsonSubTypes.Type(value = SequenceSegment.class, name = "SEQUENCE") @JsonSubTypes.Type(value = SequenceSegment.class, name = "SEQUENCE")
}) })
public abstract class SegmentConfig { public abstract class SegmentConfig {
/**
* 段类型PREFIX / DATE / SEQUENCE
*/
private String type;
} }