Java 从POJO为Jackson创建CN1 JSON数组
好的,我在将CN1端的POJO从设备传输到Rest服务时遇到了一些问题,Rest服务可以使用和生成JSON 我设法使用Jackson生成的JSON在设备上进行解析,并将其放在内部SQLite数据库中,在设备端添加了一个字段,因为我需要一个外键来存储在SQLite数据库中。因此,我从Restservice复制了POJO,删除了Hibernate注释并添加了外键 在Restservice方面,我运行了Hibernate,因此不需要外键,它可以通过ArrayList和maps正常工作 所以从服务中获取元素可以很好地工作,现在的问题是将更新的元素返回到服务和数据库 在设备端,我正在运行CN1数据utils库来获取和保存SQLite数据库上的项目 这些项被读取到ArrayList,然后我想将它们作为JSON数组推回到Rest服务,Rest服务应该根据正确的格式将JSON直接反序列化到一个对象 CN1侧的同步方法:Java 从POJO为Jackson创建CN1 JSON数组,java,json,rest,jackson,codenameone,Java,Json,Rest,Jackson,Codenameone,好的,我在将CN1端的POJO从设备传输到Rest服务时遇到了一些问题,Rest服务可以使用和生成JSON 我设法使用Jackson生成的JSON在设备上进行解析,并将其放在内部SQLite数据库中,在设备端添加了一个字段,因为我需要一个外键来存储在SQLite数据库中。因此,我从Restservice复制了POJO,删除了Hibernate注释并添加了外键 在Restservice方面,我运行了Hibernate,因此不需要外键,它可以通过ArrayList和maps正常工作 所以从服务中获取
Database db = Display.getInstance().openOrCreate(DBNAME);
DAOProvider provider = new DAOProvider(db, SQLCONFIG, DBVERSION);
provider.set("task", new TaskDAO(provider));
TaskDAO taskDAO = (TaskDAO) provider.get("task");
ArrayList<Task> tasks = (ArrayList<Task>) taskDAO.fetchAll();
ArrayList tasksForService = new ArrayList();
for (Task task : tasks) {
tasksForService.add(task.toJSON());
}
JSONObject tasksAsJSON = new JSONObject();
tasksAsJSON.put("tasks", tasksForService);
// tasksAsJSON.put("tasks", tasksForService);
db.close();
我在这里做错了什么,因为我从服务f.e.那里得到的格式不同。它看起来像这样,而且差别很大
[{"id":100004,"name":"bob","plannedDate":1461103200000,"finishDate":1461106800000,"status":1,"description":null,"commentary":"","signature":""},
{"id":100001,"name":"somestuff","plannedDate":1457910000000,"finishDate":1459288800000,"status":1,"description":"blablub","commentary":"xy","signature":"100001_30.03.2016_signature.png"}]
CN1上的Task.java,只是为了有人想知道toJSON方法的作用,我尝试了这种方法,但这不是正确的解决方案
@Override
public String toString() {
return "Task [id=" + id + ", projectId=" + projectId + ", name=" + name + ", plannedDate=" + plannedDate + ", finishDate=" + finishDate + ", status=" + status
+ ", commentary=" + commentary + ", signature=" + signature + "]";
}
public String toJSON() {
return "id=" + id + ", name=" + name + ", plannedDate=" + plannedDate + ", finishDate=" + finishDate + ", status=" + status + ", description=" + description
+ ", commentary=" + commentary + ", signature=" + signature;
}
如果有人发布了一个使用CN1JSON生成JSON数组的小示例?好的,有时候开发人员只需要睡眠=)
Database db=Display.getInstance().openOrCreate(DBNAME);
DAOProvider provider=新的DAOProvider(db、SQLCONFIG、DBVERSION);
set(“task”,新的TaskDAO(provider));
TaskDAO TaskDAO=(TaskDAO)provider.get(“任务”);
ArrayList tasks=(ArrayList)taskDAO.fetchAll();
JSONArray jsonTasks=新的JSONArray();
for(任务:任务){
JSONObject jsonTask=新的JSONObject();
jsonTask.put(“id”,task.getId());
put(“name”,task.getName());
//jsonTask.put(“plannedDate”,task.getPlannedDate());
//put(“finishDate”,task.getFinishDate());
jsonTask.put(“plannedDate”,new Date().toString());
jsonTask.put(“finishDate”,newdate().toString());
jsonTask.put(“status”,task.getStatus());
jsonTask.put(“description”,task.getDescription());
jsonTask.put(“commentation”,task.getcommentation());
jsonTask.put(“signature”,task.getSignature());
jsonTask.put(jsonTask);
}
System.out.println(jsonTasks.toString());
db.close();
现在输出与我想要的类似,仍然需要解决一些小问题,然后应该在jackson端传递=)我的应用程序也在做类似的事情!例如:带有cn1数据访问库的SQLite数据库,用于cn1应用程序,服务器端带有hibernate和jackson插件 我在cn1数据访问插件中开发了递归映射/取消映射对象的方法 仅供参考,我认为您也可以使用:
HashMap objectMap = new HashMap();
myDAO.map(myObject, objectMap);
Result.fromContent(objectMap).toString();
这避免了逐个处理每个属性,尤其是当您使用数据访问插件时,应该在dao中实现unmap/map方法。我已经有了map和unmap方法,它们工作得非常出色。我手动设置变量的方式使我能够隐藏foreignkey变量。我知道您已经实现了映射/取消映射方法。如果您有一个复杂的数据模式,我建议您使用这些代码(这是我的情况,我已经搜索了好几个小时的最佳解决方案)。这些方法不排除删除映射中的foreignkey变量。。。。
Database db = Display.getInstance().openOrCreate(DBNAME);
DAOProvider provider = new DAOProvider(db, SQLCONFIG, DBVERSION);
provider.set("task", new TaskDAO(provider));
TaskDAO taskDAO = (TaskDAO) provider.get("task");
ArrayList<Task> tasks = (ArrayList<Task>) taskDAO.fetchAll();
JSONArray jsonTasks = new JSONArray();
for (Task task : tasks) {
JSONObject jsonTask= new JSONObject();
jsonTask.put("id", task.getId());
jsonTask.put("name", task.getName());
// jsonTask.put("plannedDate", task.getPlannedDate());
// jsonTask.put("finishDate", task.getFinishDate());
jsonTask.put("plannedDate", new Date().toString());
jsonTask.put("finishDate", new Date().toString());
jsonTask.put("status", task.getStatus());
jsonTask.put("description", task.getDescription());
jsonTask.put("commentary", task.getCommentary());
jsonTask.put("signature", task.getSignature());
jsonTasks.put(jsonTask);
}
System.out.println(jsonTasks.toString());
db.close();
HashMap objectMap = new HashMap();
myDAO.map(myObject, objectMap);
Result.fromContent(objectMap).toString();