1

私は、Jersey in Java (JAX-RS) を介して安らかな Web サービスを開発しました: http://www.vogella.com/articles/REST/article.html

次に、Hibernate Technology を使用してデータをデータベースにマップしました。

最後に、データを表示する 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. ヘルパーメソッドを使用してJavaをjsonにマップすることについて、smcgに完全に同意しません。非常に複雑な要件がない限り、Bean で jax-rs アノテーションを使用してください。 http://wiki.fasterxml.com/JacksonAnnotationsを参照してください。
于 2012-06-26T03:54:57.337 に答える
0

JavaオブジェクトをJSONに自動的にマップするために何かに依存しているように思えます-おそらくJackson. 私は個人的にこの方法を好みません。代わりに、Jettisonを使用して、Java から Jettison JSONObject オブジェクトへの独自のマッピングを作成します。次に、JSONObject (または JSONArray) をエンティティとして使用します。私の return ステートメントは次のようになります。

return Response.ok().entity(myObjectAsJSON).build();

もののリストを返す場合は、JSONObject の代わりに JSONArray を使用します。

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;
}

このアプローチにより、柔軟性が向上し、すべてのフィールドに対して public の getter と setter を使用する必要がなくなります。

于 2012-06-25T14:45:38.000 に答える