GWT 2.8.1客户端能否用Gson?报错缺少com.google.gson.Gson源码
首先直接给结论:GWT 2.8.1并不支持在客户端代码中直接使用官方标准的Gson库,这就是你遇到报错的核心原因。
为什么会出现这个错误?
你在gwt.xml中添加的<inherits name='com.google.gson.Gson' />配置其实是无效的——官方Gson是为JVM环境设计的,并没有提供GWT客户端编译所需的模块描述文件(.gwt.xml)和可被GWT编译为JavaScript的源码。GWT编译器在处理客户端代码时,找不到com.google.gson.Gson对应的可编译资源,就会抛出No source code is available for type com.google.gson.Gson; did you forget to inherit a required module?这个错误。
可行的解决方案
如果你想在GWT客户端实现JSON解析/序列化,有几个靠谱的选择:
使用专门适配GWT的Gson分支:Gson-GWT
这个分支是专门为GWT客户端环境定制的,提供了GWT所需的模块支持。你需要引入带gwtclassifier的Gson依赖,比如Maven配置:<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.9</version> <!-- 选择和你的GWT版本兼容的版本 --> <classifier>gwt</classifier> </dependency>之后在
gwt.xml中添加的<inherits name='com.google.gson.Gson' />就会生效,你可以像使用标准Gson一样在客户端代码中调用API。使用GWT原生的JSON工具类
GWT自带了一套客户端JSON处理API,不需要额外依赖:- 简单解析可以用
com.google.gwt.json.client.JSONParser,直接将JSON字符串解析为JSONValue、JSONObject等对象 - 如果需要对象和JSON的映射,可以使用GWT的AutoBean框架,它能帮你在Java对象和JSON之间自动转换,适合复杂数据结构
- 简单解析可以用
使用其他GWT兼容的JSON库
比如Jackson-GWT,它是Jackson的GWT适配版本,同样支持客户端的JSON序列化/反序列化,API风格和Jackson一致。
额外提醒
标准的Gson库只能在GWT项目的服务端代码中使用,因为服务端是运行在JVM上的;而客户端代码会被GWT编译为JavaScript,必须使用经过GWT适配、能被编译为JS的库。
内容的提问来源于stack exchange,提问作者Prashant Palve

