@TableField(typeHandler = JacksonTypeHandler.class)不生效---报错或结果为null问题

一、问题场景

数据库的user表中有一个info字段,是JSON类型(如下),而目前User实体类中却是String类型,这样一来,我们要读取info中的属性时就非常不方便。如果要方便获取,info的类型最好是一个Map或者实体类。

{"age": 20, "intro": "佛系青年", "gender": "male"}

而一旦我们把info改为对象类型,就需要在写入数据库时手动转为String,再读取数据库时,手动转换为对象,这会非常麻烦。

因此MybatisPlus提供了很多特殊类型字段的类型处理器,解决特殊字段类型与数据库类型转换的问题。例如处理JSON就可以使用JacksonTypeHandler处理器。

常规步骤:

  1. 定义一个用来填充info的实体类
package com.itheima.mp.domain.po;
import lombok.Data;

@Data
public class UserInfo {
    private Integer age;
    private String intro;
    private String gender;
}
  1. 将User类的info字段修改为UserInfo类型,并声明类型处理器在这里插入图片描述
    此时出现了查出info为null的问题,后面解决后仍出现了报错问题,下面逐项解决,报错如下:
16:13:23 ERROR 2068 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.result.ResultMapException: Error attempting to get column 'info' from result set.  Cause: java.lang.RuntimeException: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.itheima.mp.domain.po.UserInfo` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
 at [Source: (String)"{"age": 19, "intro": "青涩少女", "gender": "female"}"; line: 1, column: 2]] with root cause

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.itheima.mp.domain.po.UserInfo` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)

在这里插入图片描述

二、问题分析及解决

2.1 查询结果为null问题

原因:自动映射查询结果出错
解决方案: 在类上增加自动映射查询结果到Java对象的属性----autoResultMap=true
在这里插入图片描述

2.2 报错问题

分析:
这个异常表明了在尝试将数据库中的 JSON 字符串反序列化成 UserInfo 对象时出现了问题。错误信息指出了Jackson库无法构造 UserInfo 的实例,因为没有可用的构造函数(没有默认构造函数或其他可用构造函数)。
注意:我已经在类上加过了@Data注解,按理来说应该是包含构造方法的,但是这里没起作用,这一点很容易被忽略!!!
解决:改变一下lombok的依赖版本,或者直接手动添加一下全参和无参构造方法(Alt+insert快捷键)
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

三、结束

关于一些因为配置出现的问题有很多形式和原因,任何疑问欢迎私信指教!!!
分享:
秦王扫六合,虎视何雄哉!
挥剑决浮云,诸侯尽西来。

  • 23
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

karry0130

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值