GSON,在不同范围加载 class 时不考虑 @SerializedName
GSON, @SerializedName not taken into account when class is loaded in different scope
我在两个不同的包和两个不同的 .jars 中创建了两个完全相同的 classes。 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;
}
}
当 portlet 中有以下代码时:
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());
令我惊讶的是,结果是不同的。对于 globalBean,不考虑 @SerializedName。可能是什么原因?全局 class 在全局范围内可用,本地范围仅在 portlet 范围内可用。
{"SOMETHING":"100","CUENTA":"account"}
{"id":"100","account":"account"}
原因是在 portlet 范围内加载了 gson-2.2.0,在全局范围内加载了 gson-3.2.1。只留下全局的解决了这个问题。
我在两个不同的包和两个不同的 .jars 中创建了两个完全相同的 classes。 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;
}
}
当 portlet 中有以下代码时:
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());
令我惊讶的是,结果是不同的。对于 globalBean,不考虑 @SerializedName。可能是什么原因?全局 class 在全局范围内可用,本地范围仅在 portlet 范围内可用。
{"SOMETHING":"100","CUENTA":"account"}
{"id":"100","account":"account"}
原因是在 portlet 范围内加载了 gson-2.2.0,在全局范围内加载了 gson-3.2.1。只留下全局的解决了这个问题。