fix: 修复SegmentConfig Jackson多态序列化type冲突
- 移除SegmentConfig中与@JsonTypeInfo冲突的type字段 - buildSegment改用instanceof替代getType() - 避免序列化时type覆盖为null导致反序列化失败
This commit is contained in:
@@ -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());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user