我在两个不同的包和两个不同的 .jar 中创建了两个完全相同的类。 com.test 在 Tomcat7 中全局加载(放置在/lib/ext/中),而 es.package 作为 portlet 的依赖项加载。
import com.google.gson.annotations.SerializedName;
import java.io.Serializable;
public class RequestBean implements Serializable {
@SerializedName("SOMETHING")
private String id;
@SerializedName("CUENTA")
private String account;
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
当组件中具有以下代码时:
com.test.RequestBean localBean = new com.test.RequestBean();
localBean.setAccount("account");
localBean.setId("100");
es.package.RequestBean globalBean = new es.package.RequestBean();
globalBean.setAccount("account");
globalBean.setId("100");
System.out.println(gson.toJson(localBean, localBean.getClass()).toString());
System.out.println(gson.toJson(globalBean, globalBean.getClass()).toString());
令我惊讶的是,结果是不同的。对于全球豆@SerializedName不考虑在内。可能是什么原因?全局类在全局作用域中可用,而本地类仅适用于 Portlet 的作用域。
{"SOMETHING":"100","CUENTA":"account"}
{"id":"100","account":"account"}
原因是 gson-2.2.0 在 portlet 的作用域中加载,gson-3.2.1 在全局范围内加载。只留下全局的解决了这个问题。