GSON,@SerializedName将类加载到不同的范围内时不考虑在内



我在两个不同的包和两个不同的 .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 在全局范围内加载。只留下全局的解决了这个问题。

最新更新