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) {
|
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());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user