MySQL中JSON字段类型反序列化问题
😀问题描述
在
MyBatis-Plus中,若想将数据库中的JSON字段 自动映射为Java对象(如Map<String, Object>或自定义POJO),通常会使用内置的JacksonTypeHandler。但仅配置
typeHandler是不够的,你还需要开启一个关键开关:autoResultMap = true。否则,即使
SQL查询成功,Java对象中的字段仍会是null!
✅ 正确配置方式
实体类注解(必须开启
autoResultMap)
@TableName(value = "chart", autoResultMap = true) // ⚠️ 关键!默认为 false
@Data
public class Chart {
/**
* 生成的图表数据(存储为 JSON 字符串)
*/
@TableField(typeHandler = JacksonTypeHandler.class)
private Map<String, Object> genChart;
}
XML映射(可选,但推荐显式声明)
如果你在 XML 中编写了自定义查询,建议也显式指定 typeHandler:
<result property="genChart" column="gen_chart"
typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>💡 底层原理简析
当 autoResultMap = false(默认)时,MyBatis-Plus 不会为 typeHandler 字段生成 resultMap,导致 JSON 无法反序列化。
开启后,MP 会动态构建类似以下的内部映射:
<resultMap type="Chart">
<result property="genChart" column="gen_chart"
typeHandler="JacksonTypeHandler"/>
</resultMap>
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果