在这种情况下,如何为GSON指定通用类型 - java

我有以下代码来说明我的问题:

首先,我定义Box类和Cat类

public class Box<T> {
    private T data;

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}
public class Cat {
    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

然后定义GsonUtils(静态类),该类旨在将一些json字符串序列化为Box<T>的对象

public class GsonUtils {

    public static <T> Box<T> json2BoxObject(String json) {
        Type tpe = new TypeToken<Box<T>>(){}.getType();
        return  new GsonBuilder().create().fromJson(json, tpe);
    }

}

如果我可以为Cat方法提供json2BoxObject类型,那么我将得到Box<Cat>
如果我可以提供Dog类型为json2BoxObject的方法,那么我会得到一个Box<Dog>

但是,我不知道如何为json2BoxObject提供类型,这是我要问的问题

使用上面的代码,给json2BoxObject和json字符串{"data":{"name":"Kitty","age":1}},我想得到一个Box<Cat>对象,但是我得到了Box [Map]

参考方案

在某些时候,您需要提及猫或狗。我使用Box创建了Type,并在json2Java方法中传递了它。

String msg ="{\"data\":{\"name\":\"Kitty\",\"age\":1}}";
Type type = new TypeToken<Box<Cat>>(){}.getType();
Box<Cat> obj = GsonUtils.json2Java(msg, type);
System.out.println(obj);

json2Java方法是:

public static <T> Box<T> json2Java(String json, Type type) {
    Box<T> box = new GsonBuilder().create().fromJson(json, type);
    return box;
}

页面加载而不是提交时发生struts验证 - java

请原谅我;我对Struts有点陌生。我遇到一个问题,即页面加载而不是我实际提交表单时发生了验证。我整天都在论坛上搜寻和搜寻,没有任何运气。我显然做错了一些事情,应该很容易确定,但是我还没有发现问题所在。这是我的struts.xml的片段:<action name="*Test" method="{1}" clas…

DataSourceTransactionManager和JndiObjectFactoryBean和JdbcTemplate的用途是什么? - java

以下的用途是什么:org.springframework.jdbc.core.JdbcTemplate org.springframework.jdbc.datasource.DataSourceTransactionManager org.springframework.jndi.JndiObjectFactoryBean <tx:annotatio…

Struts2中的错误处理 - java

我对如何在Struts2中进行错误处理感到困惑。我希望在发生错误时将用户引导到一个中心页面。此外,当发生错误时,我希望将其记录下来,因为我使用的是log4j,因此我将其记录为log.error(e.getMessage(), e);但是,在动作类中,如果我捕获到错误(将我的所有代码放入try / catch中),则不会出现中央/常见错误页面。因此,我决定不捕…

Java中的“ <<”运算符 - java

最喜欢的语句来自Java的Character类:(1 << Character.PARAGRAPH_SEPARATOR)) >> type PARAGRAPH_SEPARATOR是字节,type是整数。这句话中的操作员,他们做什么?如何以及在哪里可以使用这些运算符?这是oracles java.lang.Character文档。该类中…

在特定的Swing组件上设置自定义外观 - java

是否可以在Swing GUI上仅针对特定组件或组件集设置用于Synth外观的文件,而无需为其他任何组件进行更改? java参考方案 是的,有可能。将类型指定为“区域”,将其更改为“名称”,将值更改为由setName(“ componentName”)给定的特定名称;应用程序中的方法。添加这个<style id="titleBarButtons…