diff --git a/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/base/BaseEntityWithLogicDelete.java b/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/base/BaseEntityWithLogicDelete.java index 6c24260b896cd3951a0bb0644878e462e5b31f28..12e8ca894fa6a784c9a6e4186ebd8bca2ac6b014 100644 --- a/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/base/BaseEntityWithLogicDelete.java +++ b/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/base/BaseEntityWithLogicDelete.java @@ -1,10 +1,17 @@ package com.schbrain.framework.autoconfigure.mybatis.base; +import cn.hutool.core.util.NumberUtil; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableLogic; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.schbrain.framework.autoconfigure.mybatis.constant.MybatisConstants; import lombok.*; +import java.io.IOException; + /** * 带逻辑删除的基础实体类, 此类属性不需要显式设置, 框架会自动处理 * @@ -22,6 +29,7 @@ public class BaseEntityWithLogicDelete extends BaseEntity { * 注意:默认不参与查询, 只有写 sql 明确指定查询此字段的时候才有值 */ @TableLogic + @JsonDeserialize(using = LogicDeleteDeserializer.class) @TableField(value = MybatisConstants.DELETED, select = false) protected Boolean deleted; @@ -35,4 +43,20 @@ public class BaseEntityWithLogicDelete extends BaseEntity { @TableField(value = MybatisConstants.DELETE_VERSION, select = false) protected Long deleteVersion; + public static class LogicDeleteDeserializer extends JsonDeserializer { + + @Override + public Boolean deserialize(JsonParser parser, DeserializationContext context) throws IOException { + String currentValue = parser.getValueAsString(); + if (currentValue == null) { + return null; + } + if (NumberUtil.isNumber(currentValue)) { + return NumberUtil.parseInt(currentValue) == 1; + } + return Boolean.parseBoolean(currentValue); + } + + } + }