fix:【framework 框架】JacksonTypeHandler 导致 String 处理问题

This commit is contained in:
YunaiV
2025-09-20 11:54:01 +08:00
parent 100bdf8230
commit a6d9da31e8
3 changed files with 7 additions and 5 deletions

View File

@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.framework.mybatis.core.handler.DefaultDBFieldHandler; import cn.iocoder.yudao.framework.mybatis.core.handler.DefaultDBFieldHandler;
import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration;
import com.baomidou.mybatisplus.core.handlers.IJsonTypeHandler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator; import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
@ -80,8 +81,8 @@ public class YudaoMybatisAutoConfiguration {
throw new IllegalArgumentException(StrUtil.format("DbType{} 找不到合适的 IKeyGenerator 实现类", dbType)); throw new IllegalArgumentException(StrUtil.format("DbType{} 找不到合适的 IKeyGenerator 实现类", dbType));
} }
@Bean @Bean // 特殊:返回结果使用 Object 而不用 JacksonTypeHandler 的原因,避免因为 JacksonTypeHandler 被 mybatis 全局使用!
public JacksonTypeHandler jacksonTypeHandler(List<ObjectMapper> objectMappers) { public Object jacksonTypeHandler(List<ObjectMapper> objectMappers) {
// 特殊:设置 JacksonTypeHandler 的 ObjectMapper // 特殊:设置 JacksonTypeHandler 的 ObjectMapper
ObjectMapper objectMapper = CollUtil.getFirst(objectMappers); ObjectMapper objectMapper = CollUtil.getFirst(objectMappers);
if (objectMapper == null) { if (objectMapper == null) {

View File

@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableLogic;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fhs.core.trans.vo.TransPojo; import com.fhs.core.trans.vo.TransPojo;
import lombok.Data; import lombok.Data;
import org.apache.ibatis.type.JdbcType;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ -37,14 +38,14 @@ public abstract class BaseDO implements Serializable, TransPojo {
* *
* 使用 String 类型的原因是,未来可能会存在非数值的情况,留好拓展性。 * 使用 String 类型的原因是,未来可能会存在非数值的情况,留好拓展性。
*/ */
@TableField(fill = FieldFill.INSERT) @TableField(fill = FieldFill.INSERT, jdbcType = JdbcType.VARCHAR)
private String creator; private String creator;
/** /**
* 更新者,目前使用 SysUser 的 id 编号 * 更新者,目前使用 SysUser 的 id 编号
* *
* 使用 String 类型的原因是,未来可能会存在非数值的情况,留好拓展性。 * 使用 String 类型的原因是,未来可能会存在非数值的情况,留好拓展性。
*/ */
@TableField(fill = FieldFill.INSERT_UPDATE) @TableField(fill = FieldFill.INSERT_UPDATE, jdbcType = JdbcType.VARCHAR)
private String updater; private String updater;
/** /**
* 是否删除 * 是否删除

View File

@ -610,7 +610,7 @@ public class PayOrderServiceTest extends BaseDbAndRedisUnitTest {
orderExtensionMapper.insert(orderExtension); orderExtensionMapper.insert(orderExtension);
// 重要:需要将 order 的 extensionId 更新下 // 重要:需要将 order 的 extensionId 更新下
order.setExtensionId(orderExtension.getId()); order.setExtensionId(orderExtension.getId());
orderMapper.updateById(new PayOrderDO().setId(order.getId()).setExtensionId(orderExtension.getId())); orderMapper.updateById(order);
// 准备参数 // 准备参数
PayChannelDO channel = randomPojo(PayChannelDO.class, o -> o.setId(10L)); PayChannelDO channel = randomPojo(PayChannelDO.class, o -> o.setId(10L));
PayOrderRespDTO notify = randomPojo(PayOrderRespDTO.class, PayOrderRespDTO notify = randomPojo(PayOrderRespDTO.class,