0

RESTサービスとJPAで書かれたJavaを使用して、HTML5クライアントサーバーアプリケーションを開始しています。サーバー側の実装方法に問題があります。あなたがオブジェクトを持っている状況を想像してください

public class User {
    private String firstName = "";
    private String surName = "";
    private Address address = "";
}

public class Address {
    private long id = 0L;
    private String sAddress ="";
}

これは、db の作成/削除/更新時に残りのサービスとコントローラーの両方を使用する最終的なエンティティです。

ここで、(jquery と ajax を使用して) ui から新しいユーザーを DB に挿入しようとすると、JSON オブジェクトが取り込まれました。しかし、ユーザーオブジェクト内にそのアドレスオブジェクトがあります。それを実装/使用する方法はありますか、それとも基本型のみである新しい pojo を作成してから、User のような最終的な JPA エンティティに Address-object を設定する新しいレイヤーを作成する必要がありますか? 私の英語が問題を説明するのに十分であることを願っています。

  1. これは、データ (JPA エンティティ) が Web サービス層およびクライアント層のオブジェクトとまったく同じであるアプリケーションを作成することをお勧めしますか?
  2. それを実装する方法はありますか?
  3. HTML5(JSON)の組み合わせ、または一般的に、残りのサービスで独自のオブジェクトタイプを使用することさえ可能ですか?

Netbeans 7.3 では、そのような問題やアプリを簡単に作成できます。最初に 2 つのテーブルを持つ DB を作成し、プロジェクトを作成して DB から Web サービスを生成するだけです。これで、エンティティ、ファサード、データベース、およびプロジェクトを備えた Web サービスを取得できました。

以前にサンプルコードでこれを尋ねましたが、答えはありません: https://stackoverflow.com/questions/14936031/mapping-and-parsing-json-objects-in-ui-and-in-java

そして、次のようなERRORを返します。

WARNING: StandardWrapperValve[ServletAdaptor]: PWC1406: Servlet.service() for servlet ServletAdaptor threw exception
org.codehaus.jackson.map.JsonMappingException: Can not instantiate value of type [simple type, class entity.Address] from JSON String; no single-String constructor/factory method (through reference chain: entity.User["addressAddressId"])
    at org.codehaus.jackson.map.deser.std.StdValueInstantiator._createFromStringFallbacks(StdValueInstantiator.java:379)
    at org.codehaus.jackson.map.deser.std.StdValueInstantiator.createFromString(StdValueInstantiator.java:268)
4

3 に答える 3

0

オブジェクト(テーブルに対応)を含むUserJPAオブジェクト(テーブルに対応)を作成する方法を尋ねていますか?USERAddressADDRESS

もしそうなら、ここにいくつかの答えがあります:

  1. これを行うことは完全に有効ですが、一部の開発者やフレームワークは、Webサービス層とクライアント層の間の抽象化層を提唱しています。これらのエンティティを直接使用することを提唱する人もいます(たとえば、Railsは通常このモデルを使用します)。他の人は、この使用法のために特定のデータ転送オブジェクトを作成することを提唱しています(たとえば、既存のWSDLファイルからサーバースタブを生成する)。前者の利点は、重複が少ないことです。後者の利点は抽象化レイヤーであるため、ドメインを変更した場合でも、Webサービスレイヤーを変更する必要はありません。
  2. @OneToOne少なくとも、から、そして場合によっては他の方向にも注釈をUser使用Addressします。上にリンクされているページでは、住所を持つ従業員の例も使用しています。:)

お役に立てば幸いです。

于 2013-02-23T20:39:17.863 に答える
0

あなたが得た例外によると、不足しているのは Address オブジェクトの適切なコンストラクターだけです。Address(String x) コンストラクターが必要です。

于 2013-12-31T21:26:43.733 に答える
0

これは、データ (JPA エンティティ) が Web サービス層およびクライアント層のオブジェクトとまったく同じであるアプリケーションを作成することをお勧めしますか?

RESTful WebServices では、リソースに対して HTTP メソッドを呼び出します。通常、HTTP-GETURI で定義されたリソースを取得します。そのため、その要求を処理し、データを取得して応答の形式で戻す必要があります。要求がデータの純粋な取得である場合、サーバー上のデータとクライアント上のデータは類似している必要があります。

それを実装する方法はありますか?

ここで、永続化レイヤーにアクセスする DAO オブジェクトを使用できます。

HTML5(JSON)の組み合わせ、または一般的に、残りのサービスで独自のオブジェクトタイプを使用することさえ可能ですか?

REST は文字通り HTML とは何の関係もありません。サービスがどのように機能するかのパラダイムです。HTML は、ブラウザなどのクライアントと対話するために使用できる言語です。

于 2013-02-23T21:48:11.607 に答える