我通过 Jersey in Java (JAX-RS) 开发了一个 restful Web 服务: http://www.vogella.com/articles/REST/article.html
然后我使用Hibernate技术将数据映射到数据库。
最后,我开发了一个安卓应用程序来显示数据。
这是我的 Web 服务中的方法示例:
@GET
@Path("/project_id/username/get/{projectId}/{username}/")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response deliverableList(@PathParam("projectId") long projectId,
@PathParam("username") String username) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
List<Deliverable> list = null;
try {
list= (List<Deliverable>) session.createQuery(
"from Deliverable as d where d.project.id= :id").setLong("id", projectId).list();
} catch (HibernateException e) {
e.printStackTrace();
session.getTransaction().rollback();
}
session.getTransaction().commit();
return Response.status(201).entity(list).build();
}
如您所见,我使用"Response.status(201).entity(list).build()"来传输数据列表。这是一个好方法吗?如果不是,您对传输数据有什么建议。请用一些代码和示例来支持您的解释。
- Response.ok().enity(object).build() 是返回数据的正确方法
- 您确实希望将休眠内容移动到数据访问层...很难管理与服务层混合在一起的内容
- 我完全不同意 smcg 关于使用辅助方法将 java 映射到 json。使用bean上的jax-rs注释来执行此操作,除非您有非常复杂的要求:请参阅 http://wiki.fasterxml.com/JacksonAnnotations
在我看来,您似乎依靠某些东西来自动将Java对象映射到JSON-可能是杰克逊。我个人不喜欢这种方法。相反,我使用Jettison并创建我自己的从Java到Jettison JSONObject对象的映射。然后我使用 JSONObject(或 JSONArray)作为实体。我的返回声明是这样的:
return Response.ok().entity(myObjectAsJSON).build();
在返回事物列表的情况下,请使用 JSONArray 而不是 JSONObject。
您需要一个帮助程序方法来将 Java 对象映射到 JSON。
public JSONArray deliverableListToJSON(List<Deliverable> deliverables)
throws JSONException {
JSONArray result = new JSONArray();
for(Deliverable deliverable : deliverables) {
JSONObject deliverableJSON = new JSONObject();
deliverableJSON.put("importantValue", deliverable.getImportantValue());
result.put(deliverableJSON);
}
return result;
}
这种方法为您提供了更大的灵活性,并且不会强迫您为所有领域设置公共获取者和设置者。