具有动态List类型的Java包装类

时间:2017-06-25 16:07:33

标签: java spring jackson

我需要创建某种响应包装器(在Rest控制器中)。所有映射都应返回一些必要的字段和一些特定于每个类的字段。

例如,我有一个返回类User的对象列表的映射,以及一个返回类型为Account的对象列表的映射。结果始终类型List(我来自JdbcTemplate),因为它可能包含更多的用户/帐户:

public class User {

    private String name;
    private String jobTitle;

    // constructor, getters, setters
}

public class Account {

    private String id;
    private String type;

    // constructor, getters, setters
}

我有一个包装器:

public class Wrapper {
    public String requestDate;
    public String result;
    public List<?> resultObject; // should be User or Account

    // constructor, getters, setters
}

如何才能创建这样的包装器实例:

//suppose I have a List of User objects called myUserList;
Wrapper wrapper = new Wrapper(today, "success", User.class, myUserList);

它看起来与Spring的BeanPropertyRowMapper<T>类似,但我坚持为我实施这样的。

2 个答案:

答案 0 :(得分:0)

我不知道我是否正确理解了您的问题,但您可以通过这种方式使用泛型

public class Wrapper<T> {
    public String requestDate;
    public String result;
    public List<T> resultObject; 

    // constructor, getters, setters
}

因为yuo可以通过&#34;泛型方式看到你定义了包装器&#34 ;;现在每次构建包装器实例时都可以指定一个类;例如,如果要创建User的包装器:

List<User> myUserList = new ArrayList<User>();
Wrapper<User> usrWrap = new Wrapper(today, "success", myUserList);

我希望它有用

安吉洛

答案 1 :(得分:0)

使用这样的东西怎么样:

Wrapper抽象类:

public abstract class Wrapper {
    public String requestDate;
    public String result;

    // constructor, getters, setters
}

用户包装类:

public class UserWrapper extends Wrapper {

    public List<User> resultObject; 

    // constructor, getters, setters
}

帐户包装类:

public class AccountWrapper extends Wrapper {

    public List<Account> resultObject; 

    // constructor, getters, setters
}

<强> 消耗:

UserWrapper userWrapper = new Wrapper(today, "success", myUserList);

AccountWrapper accountWrapper = new Wrapper(today, "success", myAccountList);

List<Wrapper> wrapperList = Array.asList(userWrapper, accountWrapper);