Attempted to serialize java.lang.Class Forgot to register a type adapte

今天使用Mybatis练手,准备将db中查出来的结果集序列化,使用Gson  代码如下

  List<User> users1 = userMapper.selectUserCollection(1);
  Gson gson1 = new Gson();
  String str = gson1.toJson(users1);

User类如下

Expose
package com.thq.mybatis.model;import java.util.List;import com.google.gson.annotations.Expose;public class User {private Integer id;private String name;private Integer age;private String pwd;private Menu menu;private List<Menu> menus;//get set 方法省略}


一执行,直接报错

百度了一下点击打开链接  上面有一种解决办法 使用Gson 库中的@Expose注解 即:将pojo类需要序列化的字段都加上该注解

public class User {
	@Expose
	private Integer id;
	@Expose
	private String name;
	@Expose
	private Integer age;
	@Expose
	private String pwd;
	@Expose
	private Menu menu;
	@Expose
	private List<Menu> menus;
}

序列化代码

      

Gson gson1 = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
		String str = gson1.toJson(users1);

正常输出,问题解决,优点是比较简单,不过 有个缺点:问题解决上面的方法pojo类要依赖Gson库,而且每个字段都需要加注解,需要更改两个类,pojo字段多的需要加大量的注解

其实还有一个方法,mybatis返回的数据中带有了代理类,所以不能直接序列化,我门可以将返回的结果转换一下,将需要的字段放到新的pojo类中,问题也能搞定,而且原生支持。优点:直观,缺点:如果目标类中比较复杂,需要new 很多的对象,实现需要拷贝的字段


做个笔记,方便以后查看




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值