我有一个servlet,通过查询参数传递,从DAO获取对象列表,将列表转换为JSON,并将其发回给响应。每个列表由有方法的对象:如何将List <实现接口的对象>传递给方法?
public String getAsJson(){...}
而且servlet有一堆看起来像大多张玉峰方法:
private String getUserListAsJson() {
List<User> userList = this.dao.getUsers();
StringBuilder builder = new StringBuilder();
builder.append('[');
// loops over the list appending the value of each objects getAsJson()
builder.append(']');
return builder.toString();
}
的问题是,我有大约6的方法(和不断增长),除了不同的DAO查询外,看起来完全一样。我的想法是创建一个只有getAsJson()方法定义的接口,让每个bean都实现它,然后在servlet中使用实现了该接口的对象的另一个方法。最终看上去像这样:
public Interface JsonEnabled {
public String getAsJson();
}
public class User implements JsonEnabled {
....
@Override
public String getAsJson() {...}
}
public class TheServlet {
...
private String getUserListAsJson() {
List<User> userList = this.dao.getUsers();
return this.getListAsJson(userList);
}
private String getListAsJson(List<? implements JsonEnabled> list) {
// The loop code that is in each method.
}
}
所以,如果有人实际上已经读到了这里= P,即不编译和仰视从Oracle一些文件后,你只能有延伸,而不是实现为通用参数。使所有的类从一个只有getAsJson()方法的抽象类扩展到语义上没有意义(类是无关的)。
我还没有找到一个很好的解决方案,或只是谷歌搜索,所以任何帮助/见解将不胜感激。
tangental,但你真的想自己建立JSON字符串吗?建议使用像杰克逊或其他东西的图书馆 – 2012-04-10 13:58:38