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) {
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());
}
/**

View File

@@ -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;
}