我正在使用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);
}
有人可以告诉我我必须做些什么才能让它发挥作用吗?
谢谢, 克里斯
答案 0 :(得分:1)
您可以尝试将参数更改为String而不是Key,然后使用com.google.appengine.api.datastore.KeyFactory.stringToKey(String stringKey)获取密钥。