1

我通过 Jersey in Java (JAX-RS) 开发了一个宁静的网络服务:http ://www.vogella.com/articles/REST/article.html

然后我使用 Hibernate 技术将数据映射到数据库。

最后我开发了一个 android 应用程序来显示数据。

这是我的 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()”来传输数据列表。这是一个好方法吗?如果不是,您对传输数据有什么建议。请用一些代码和示例来支持您的解释。

4

2 回答 2

2
  1. Response.ok().enity(object).build() 是返回数据的正确方式
  2. 您真的想将您的休眠内容移动到数据访问层......这将很难与您的服务层混合管理
  3. 我完全不同意 smcg 关于使用辅助方法将 java 映射到 json。除非您有非常复杂的要求,否则请在您的 bean 上使用 jax-rs 注释:请参阅http://wiki.fasterxml.com/JacksonAnnotations
于 2012-06-26T03:54:57.337 回答
0

在我看来,您似乎正在依赖某些东西将您的 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;
}

这种方法为您提供了更大的灵活性,并且不会强迫您为所有领域都使用公共 getter 和 setter。

于 2012-06-25T14:45:38.000 回答