在使用Mybatis的过程中,使用了resultMap延迟加载。

延迟加载:association联表查询的过程中,查询另外两个表的对象。而延迟加载是指只有在使用这两个对象的时候才会进行查询。

问题的产生,在我这里,我是直接通过路由url直接查询 StudentDto_2 对象。延迟加载的对象为 TClass 和 Assistant.

public class StudentDto_2 {
private Integer stuId;
private String stuNum; //学生编号,unique
private String studentName;
private Long birthDate;
private TClass tClass;
private Assistant assistant;
}

在序列化的过程中,会抛出以下异常。

2018-08-27 11:14:29.339 ERROR 34755 --- [nio-8089-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class org.apache.ibatis.executor.loader.javassist.JavassistProxyFactory$EnhancedResultObjectProxyImpl]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.apache.ibatis.executor.loader.javassist.JavassistProxyFactory$EnhancedResultObjectProxyImpl and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.zimo.mybaties.util.Result["data"]->com.zimo.mybaties.dto.StudentDto_2_$$_jvstfe4_0["handler"])] with root cause

问题:Springmvc+mybatis,mybatis配置延迟加载时,json序列化异常

我目前的解决办法是关闭延迟加载,关闭后一切正常。

寻找另外一种方法

参考链接:https://blog.csdn.net/justinytsoft/article/details/53575236

在SpringBoot中,默认使用Jackson来实现java对象到json格式的序列化与反序列化。Jackson的转化是通过ObjectMapper来实现的。SpringBoot内置了一个ObjectMapper。我们通过下面的配置来

实现序列化Mybatis的延迟加载。

package com.zimo.mybaties.config;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.springframework.context.annotation.Configuration; @Configuration
public class CustomerMapper extends ObjectMapper {
public CustomerMapper() {
this.setSerializationInclusion(JsonInclude.Include.NON_NULL);  //返回为null的值则去除,
this.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS,false);  //解决延迟加载的对象
}
}

返回参数中了多了一个代理对象handle

{
"code": 200,
"message": "获取学生信息",
-"data": {
"stuId": 22,
"stuNum": "12310",
"studentName": "天涯10",
"birthDate": 777524356000,
-"tClass": {
"classId": 3,
"classNum": "1921083145",
"className": "数学"
},
-"assistant": {
"assistantId": 1,
"assistantNum": "1315151521",
"name": "还在于是"
},
"handler": { }
}
}

转自:https://www.cnblogs.com/wbq1113/p/9541114.html

【转】使用Mybatis时遇到的延迟加载造成返回异常的问题——HttpMessageConversionException: Type definition error的更多相关文章

  1. mybatis入门基础(七)----延迟加载

    一.什么是延迟加载 resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能. 需求: ...

  2. mybatis高级(3)_延迟加载_深度延迟_一级缓存_二级缓存

    设置延迟加载需要在mybatis.xml中设置 注: 侵入式延迟加载为真时是延迟加载 侵入式延迟加载为假时是深度延迟加载 <!-- 延迟加载和深度延迟加载 --> <settings ...

  3. mybatis学习记录七——延迟加载

    14       延迟加载 14.1     什么是延迟加载 resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.co ...

  4. SSM框架之Mybatis(7)延迟加载、缓存及注解

    Mybatis(7)延迟加载.缓存及注解 1.延迟加载 延迟加载: 就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据.延迟加载也称懒加载. **好处:**先从单表查询,需要时再从关联表去关 ...

  5. 搭建mybatis时的小问题

    1.源文件中的xml文件经过编译后没有打包到classes中去,在源文件包中写的mapper文件运行时找不到. 解决办法: pom文件build下添加编译时加入xml和resource文件下的所有文件 ...

  6. 简单探讨spring整合mybatis时sqlSession不需要释放关闭的问题

    https://blog.csdn.net/RicardoDing/article/details/79899686 近期,在使用spring和mybatis框架编写代码时,sqlSession不需要 ...

  7. 学习mybatis时出现了java.io.IOException: Could not find resource EmployeeMapper.xml

    使用mybatis时出现了Could not find resource EmployeeMapper.xml和Could not find resource mybatis-config.xml两种 ...

  8. 使用IDEA工具整合mybatis时使用@Resource和@Autowired自动注解bean时会显示红色问题的解决办法

    使用IDEA工具整合mybatis时使用@Resource和@Autowired自动注解bean时会显示红色问题的解决办法 idea中springboot整合mybatis时,通过@Autowired ...

  9. Spring Boot 整合mybatis时遇到的mapper接口不能注入的问题

    现实情况是这样的,因为在练习spring boot整合mybatis,所以自己新建了个项目做测试,可是在idea里面mapper接口注入报错,后来百度查询了下,把idea的注入等级设置为了warnin ...

随机推荐

  1. ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails ()

    centos7.5 删除表空间文件失败 问题: mysql> alter table country discard tablespace; ERROR 1451 (23000): Cannot ...

  2. linux PWM蜂鸣器移植以及驱动程序分析【转】

    本文转载自:https://blog.csdn.net/lxllinux/article/details/80885331 一.关于PWM:        PWM(Pulse Width Modula ...

  3. PTA编程总结1—打印沙漏

    题目:7-1 打印沙漏 (20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 ***** *** * *** ***** 所谓&q ...

  4. ios外派公司—提供ios程序员外派ios应用外包业务(北京动点 可签合同)

    北京动点飞扬长年提供ios工程师外派业务. 我公司程序员平均技术情况如下: 1.二年以上iPhone/ipad开发经验: 2.熟练使用Xcode.Objective C编码技能: 3.熟悉iOS开发框 ...

  5. 查找IDEA 项目中的依赖包存放在.m2位置

    原因:在maven项目pom.xml中添加依赖,可能由于网络不好,下载不完全,导致再次下载一直报错. 就会导致出现依赖一直报错.

  6. js实现往数组中添加非存在的对象,如果存在就改变键值。

    let arr = [] // 数组中元素数据类型为{name: 'bb', age: 12} // 现在需求是,将每次获得的新对象{name: '', age: }push到数组arr中,但前提是数 ...

  7. 714-Card Trick

    思维题,把n个卡片倒着放,然后每个卡片循环放到最底下i次,最后出来的结果就是要求的卡牌顺序 #include<stdio.h> #include<string.h> #incl ...

  8. js日期的格式化

    我们看控制台打印的关于Date这个类 我们这里可以看到内置方法没有类似format这种方法,所以需要自己定义. 内置的方法: var myDate = new Date();myDate.getYea ...

  9. 5种网络IO模型(有图,很清楚)

    同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...

  10. CRM INBOX 结果增强功能

    前段时间接到的需求:INBOX(ICCMP_INBOX)查询结果,多选后弹出选择用户的框,选择用户,带入到单据的PARTNER FUNC的工程师中,并修改单据状态. 其实标准的INBOX的Compon ...