【发布时间】:2012-02-12 19:15:09
【问题描述】:
我正在使用 Jersey 定义如下服务:
@Path("/studentIds")
public void writeList(JsonArray<Long> studentIds){
//iterate over studentIds and save them
}
JsonArray 在哪里:
public class JsonArray<T> extends ArrayList<T> {
public JsonArray(String v) throws IOException {
ObjectMapper objectMapper = new ObjectMapper(new MappingJsonFactory());
TypeReference<ArrayList<T>> typeRef = new TypeReference<ArrayList<T>>() {};
ArrayList<T> list = objectMapper.readValue(v, typeRef);
for (T x : list) {
this.add((T) x);
}
}
}
这很好用,但是当我做一些更复杂的事情时:
@Path("/studentIds")
public void writeList(JsonArray<TypeIdentifier> studentIds){
//iterate over studentIds and save them by type
}
这里的 Bean 是一个简单的 POJO,例如
public class TypeIdentifier {
private String type;
private Long id;
//getters/setters
}
整个事情都糟糕透了。它将所有内容都转换为 LinkedHashMap 而不是实际的对象。如果我手动创建一个类,我可以让它工作:
public class JsonArrayTypeIdentifier extends ArrayList<TypeIdentifier> {
public JsonArrayTypeIdentifier(String v) throws IOException {
ObjectMapper objectMapper = new ObjectMapper(new MappingJsonFactory());
TypeReference<ArrayList<TypeIdentifier>> typeRef = new TypeReference<ArrayList<TypeIdentifier>>(){};
ArrayList<TypeIdentifier> list = objectMapper.readValue(v, typeRef);
for(TypeIdentifier x : list){
this.add((TypeIdentifier) x);
}
}
}
但我试图在不添加额外的类的情况下保持这种良好和通用性。为什么只有通用版本会发生这种情况?
【问题讨论】:
-
查看可能的重复并接受答案:stackoverflow.com/questions/6062011/…