具有动态列表类型的Java包装器类

具有动态列表类型的Java包装器类,java,spring,jackson,Java,Spring,Jackson,我需要创建某种响应包装器(在Rest控制器中)。所有映射都应该返回一些必要的字段和每个类特定的字段 例如,我有一个映射,它返回类User的对象列表,还有一个映射返回类型Account的对象列表。结果是始终类型为列表(我从JdbcTemplate)因为它可能包含多个用户/帐户: public class User { private String name; private String jobTitle; // constructor, getters, setter

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

例如,我有一个映射,它返回类
User
的对象列表,还有一个映射返回类型
Account
的对象列表。结果是始终类型为
列表
(我从
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
}

它看起来类似于Spring的
BeanPropertyRowMapper
,但我一直在努力为自己实现它。

我不知道我是否正确理解了你的问题,但你可以这样使用泛型

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

    // constructor, getters, setters
}
公共类包装器{
公共字符串请求日期;
公共字符串结果;
公开列表结果对象;
//构造函数、getter、setter
}
正如yuo所见,您以“通用方式”定义了包装器;现在,每次构建包装器实例时,都可以指定一个类;例如,如果要创建用户的包装器:

List<User> myUserList = new ArrayList<User>();
Wrapper<User> usrWrap = new Wrapper(today, "success", myUserList);
List myUserList=new ArrayList();
包装器usrWrap=新包装器(今天,“成功”,myUserList);
我希望它有用


Angelo

用这样的东西怎么样:

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

用户包装类:

public类UserWrapper扩展了Wrapper{
公开列表结果对象;
//构造函数、getter、setter
}
帐户包装类:

公共类AccountWrapper扩展了包装器{
公开列表结果对象;
//构造函数、getter、setter
}
消费:

UserWrapper UserWrapper=new Wrapper(今天,“success”,myUserList);
AccountWrapper AccountWrapper=新包装(今天,“成功”,myAccountList);
List wrapperList=Array.asList(userWrapper,accountWrapper);

以一种非常简陋的方式,您可以使用
公共列表resultObject和任何类型的对象列表都可以指定。但这会让服务的使用者对响应进行反序列化,为什么不将requestDate和result放入定制的响应头中呢?这将使消息体只包含资源表示。
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);