使用带有REST的google appengine datastore.key时出错

时间:2012-06-11 20:57:02

标签: java google-app-engine rest jersey jax-rs

我正在使用AppEngine Datastore构建一个REST应用程序作为持久层。但是,在解析密钥以创建新条目时,我在使用资源类中的com.google.appengine.api.datastore.Key时遇到问题。

错误信息如下: 严重:方法公共com.acolsolutions.loyaltycard.persistence.entities.Card com.acolsolutions.loyaltycard.resources.CardResource.findByKey(com.google.appengine.api.datastore.Key)缺少对索引0处参数的依赖性 严重:方法,公共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,未被识别为有效的资源方法。

似乎问题发生在这里。似乎值无法转换为Key类型:


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

我的REST类如下所示: import java.util.List;

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

有人可以告诉我我必须做些什么才能让它发挥作用吗?

谢谢, 克里斯

1 个答案:

答案 0 :(得分:1)

您可以尝试将参数更改为String而不是Key,然后使用com.google.appengine.api.datastore.KeyFactory.stringToKey(String stringKey)获取密钥。