0

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

错误消息如下:严重:缺少方法 public com.acolsolutions.loyaltycard.persistence.entities.Card com.acolsolutions.loyaltycard.resources.CardResource.findByKey(com.google.appengine.api.datastore.Key) at parameter at 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 类,未被识别为有效的资源方法。

似乎问题发生在这里。似乎该值无法转换为 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);
}

有人能告诉我我必须做什么才能让这个工作吗?

谢谢,克里斯

4

1 回答 1

1

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

于 2012-06-11T21:11:50.793 回答