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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tianhongqiang/article/details/60882522

今天使用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 很多的对象,实现需要拷贝的字段


做个笔记,方便以后查看




猜你喜欢

转载自blog.csdn.net/tianhongqiang/article/details/60882522