EJB中Gson使用tojson()出现的一系列问题

在EJB服务端尝试使用Gson将List<User>转换为JSON字符串时遇到问题。由于User对象中的懒加载设置,直接转换失败。解决方法是创建自定义的Gson配置,避免使用默认配置。此外,当值传递到客户端时,格式不是标准的JSON,而是对象的默认toString()结果。为了解决这个问题,需要重写User类的toString()方法以返回符合JSON格式的字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


今天在写EJB服务端代码,(ˇˍˇ) 想在客户端与服务器之间通过Json传List<User>对象,出现如下错误,并给出我自己的解决方法


1.服务端---无法将List对象转为String,正常的List都可以转的

        Gson gson=new Gson();

        List<User> users=query.getResultList();
        return gson.toJson(users);

原因:网上说User对象中存在Lazy懒加载设置,设为EAGER即可,但我试了下对我的代码不起作用

解决方案:

使用自定义的gson配置,不使用默认的,如何配置请看博客相关文章。

           <span style="color:#FF0000;">Gson gson = new GsonBuilder().registerTypeHierarchyAdapter(User.class, new MyTypeAdapter<User>()).create();</span>

           List<User> users=query.getResultList();
           return gson.toJson(users);


<span style="color:#FF0000;">MyTypeAdapter类文件
</span>

public class MyTypeAdapter<T> extends TypeAdapter<T> {
    public T read(JsonReader reader) throws IOException {
        return null;
    }

    public void write(JsonWriter writer, T obj) throws IOException {
        if (obj == null) {
            writer.nullValue();
            return;
        }
        writer.value(<span style="color:#FF0000;">obj.toString()</span>);
    }
}

这样服务端String对象就可以传到客户端了


2.值可以传了但是,传过来的不是json格式的--[bean.user@sadasd,bean.user@123123123],导致客户端使用如下代码无法转为User

                Type type = new TypeToken<ArrayList<User>>(){}.getType();  
		List<User> us=new ArrayList<>();
		us=gson.fromJson(users, type);

原因:是因为服务器端自己配置的gson--obj.toString()

解决方法:重新User的toString()方法

@Override
	//[{"userId":0,"name":"fh","ip":"1","value":1},{"userId":0,"name":"fh1","ip":"1","value":1}]
	public String toString() {
		return "{userId:" + userId + ", name:" + name + ", ip:" + ip
				+ ", value:" + value+"}" ;
	}

这样就可以得到正确的json格式,就可以成功转换为User



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值