Java 尝试返回实现同一接口的不同类的筛选Json对象数组时出现异常
这是一个Play Framework 2.0.4,Java控制器操作,旨在返回一个Json数组,其中包含实现同一接口的类外的各种实例。我想将Json字段限制为4个siren、nic、ncc、nccenr,我的对象是法国机构。 我实例化了一个机构的ArrayList,其中填充了通过EBean查询过滤的不同机构的实例Java 尝试返回实现同一接口的不同类的筛选Json对象数组时出现异常,java,json,playframework,playframework-2.0,ebean,Java,Json,Playframework,Playframework 2.0,Ebean,这是一个Play Framework 2.0.4,Java控制器操作,旨在返回一个Json数组,其中包含实现同一接口的类外的各种实例。我想将Json字段限制为4个siren、nic、ncc、nccenr,我的对象是法国机构。 我实例化了一个机构的ArrayList,其中填充了通过EBean查询过滤的不同机构的实例 public static Result getCollectivitesList() { List<Institution> collectivites = n
public static Result getCollectivitesList() {
List<Institution> collectivites = new ArrayList<Institution>();
collectivites.addAll(Commune.find.where().eq("departement", Departement.findByCode("44")).findList());
collectivites.addAll(EtablissementPublic.find.all());
collectivites.addAll(Departement.find.where().eq("code", 44).findList());
collectivites.addAll(Region.find.where().eq("code", 52).findList());
JsonContext jsonContext = Ebean.createJsonContext();
JsonWriteOptions options = new JsonWriteOptions();
options.setRootPathProperties("siren, nic, ncc, nccenr");
String jsonString = jsonContext.toJsonString(collectivites, true, options);
return ok(Json.parse(jsonString));
}
调用JsonContext.toJsonString时引发此异常。我不理解这个问题,多态性问题之间的关系,异常和启动它的方法。
你有更好的主意吗
编辑:
我尝试了另一种选择。我编写了一个嵌套类:
private static class SimplifiedInstitution {
String siren;
String nic;
String ncc;
String nccenr;
public SimplifiedInstitution(String siren, String nic, String ncc, String nccenr) {
this.siren = siren;
this.nic = nic;
this.ncc = ncc;
this.nccenr = nccenr;
}
}
我在foreach循环中填充SimplifiedInstitution的ArrayList,而不是jsonContext:
for (Institution institution : collectivites) {
simplified.add(new SimplifiedInstitution(institution.siren(), institution.nic(), institution.ncc(), institution.nccenr()));
}
然后像这样返回Json:
return ok(Json.toJson(simplified));
最后一行抛出完全相同的异常…我用DIY技巧解决了这个问题:使用上面的替代方法,覆盖SimplifiedInstitution的toString方法: 然后重写控制器操作的返回语句,如下所示:
return ok(simplified.toString()).as("application/json");
这不是很令人满意,也不能解释问题的原因,但它是有效的
PS:对不起,我的英语
public String toString() {
return "{\"siren\":\"" + siren + "\",\"nic\":\"" + nic + "\",\"ncc\":\"" + ncc + "\",\"nccenr\":\"" + nccenr + "\"}";
}
return ok(simplified.toString()).as("application/json");