2

Objectifyデータストアの処理に使用する Google Cloud Endpoints を定義しました。問題は、私のモデルが objectifycom.googlecode.objectify.Keyクラスを使用していることです。

@Entity
public class RealEstateProperty implements Serializable {

    @Id
    private Long id;
    @Parent
    private Key<Owner> owner;
    private String name;
    private Key<Address> address;

}

私のエンドポイントでは、以下を作成するメソッドを定義しましたRealEstateProperty:

@ApiMethod(name = "create", path = "properties", httpMethod = HttpMethod.POST)
public void create(RealEstateProperty property, User user) throws Exception {
    }

ではAPI Explorercreateメソッドはアドレスの を表す文字列を想定しKeyています。問題は、アドレスではなくアドレスを提供したいということKeyです。

でエンドポイントを作成することは可能objectifyですか? もしそうなら、どのようにデータモデルを設計して対処しKeyますか?

4

2 に答える 2

3

Key フィールドの代わりにアドレス フィールドを含む API (エンドポイント) を介した通信用のクラスを作成できます。

public class RealEstatePropertyAPI implements Serializable {

    private Long id;
    private Key<Owner> owner;
    private String name;
    private Address address;

}

そしてあなたのエンドポイントで:

@ApiMethod(name = "create", path = "properties", httpMethod = HttpMethod.POST)
public void create(RealEstatePropertyAPI propertyAPI, User user) throws Exception {
    //ie: get address from propertyAPI and find in datastore or create new one.
}

または、エンドポイントに別のパラメーターを追加するだけです。

于 2013-07-29T09:23:18.427 に答える
3

はい、エンドポイントは Objectify キーをサポートしていないようです。これは私にとってもいくつかの問題を引き起こしました。Maven ビルドでスローされるエラーを回避するために、エンドポイントhttps://developers.google.com/appengine/docs/java/endpoints/annotationsによって無視される Key プロパティに注釈を付けました。

 @ApiResourceProperty(ignored = AnnotationBoolean.TRUE)

エンドポイントを使用して新しい RealEstateProperty を追加するときは、エンドポイントで String 引数を使用して Address オブジェクトを作成します。新しい Address オブジェクトを引数として RealEstateProperty コンストラクターに渡し、コンストラクター内でキーを作成して割り当てます。

@Entity
public class RealEstateProperty implements Serializable {

  @Id
  private Long id;
  @Parent
  private Key<Owner> owner;
  private String name;
  @ApiResourceProperty(ignored = AnnotationBoolean.TRUE)
  private Key<Address> address;

}
于 2014-01-13T14:30:22.067 に答える