0

AppEngine Datastore を永続化レイヤーとして使用して REST アプリケーションを構築しています。ただし、キーを解析して新しいエントリを作成するときに、リソース クラス内で com.google.appengine.api.datastore.Key を使用すると問題が発生します。

エラー メッセージは次のとおりです: SEVERE: メソッド public com.acolsolutions.loyaltycard.persistence.entities.Card com.acolsolutions.loyaltycard.resources.CardResource.findByKey(com.google.appengine.api.datastore.Key) のパラメーターの依存関係がありませんindex 0 SEVERE: メソッド、パブリック com.acolsolutions.loyaltycard.persistence.entities.Card com.acolsolutions.loyaltycard.resources.CardResource.findByKey(com.google.appengine.api.dat astore.Key)、リソースの GET で注釈を付け、クラス com.acolsolutions.loyaltycard.resources.CardResource は、有効なリソース メソッドとして認識されません。

ここで問題が発生したようです。値がキー型に変換されないようです:


    public Card findByKey(@PathParam("key") Key key) {
    ...
    }

私の REST クラスは次のようになります。

import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import com.acolsolutions.loyaltycard.dataobjects.CardDAO;
import com.acolsolutions.loyaltycard.persistence.entities.Card;
import com.google.appengine.api.datastore.Key;

@Path("/cards")
public class CardResource {
CardDAO dao = new CardDAO();

@GET
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public List<Card> findAll() {
    System.out.println("findAll");
    return dao.findAll("creationDate desc");
}

@GET
@Path("search/{query}")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public List<Card> findByName(@PathParam("query") String query) {
    System.out.println("findByName: " + query);
    return dao.findByName(query, "creationDate desc");
}


@GET
@Path("{key}")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public Card findByKey(@PathParam("key") Key key) {
    //System.out.println("findByKey " + key.toString());
    return dao.findByKey(key);
}

これを機能させるために私がしなければならないことを誰かに教えてもらえますか?

ありがとう、クリス

4

1 に答える 1

1

パラメータをキーではなく文字列に変更してから、com.google.appengine.api.datastore.KeyFactory.stringToKey(String stringKey) を使用してキーを取得できます。

于 2012-06-11T21:11:50.793 に答える