0
我有一个这样的实体:GAE JPA和REST:生产实体(如JSON或XML)与datastore.Key
@Entity
@XmlRootElement
public class Article {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private com.google.appengine.api.datastore.Key key;
private String content;
private String title;
private Date created;
private Date lastUpdate;
private boolean isActive;
/* public getter and setters */
}
现在我有一个休息webserivce返回的文章:
@SuppressWarnings({ "unchecked", "unused" })
@GET
@Path("/{user}")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public List<Article> getArtilceListByUser(@PathParam("user") String userName) {
List<Article> articles = null;
EntityManager em = EMF.get().createEntityManager();
try {
articles = (List<Article>) em.createQuery("SELECT FROM Article WHERE createdBy = :user AND isActive = true")
.setParameter("user", userName)
.getResultList();
// lazy load is activated, but em is closed (find a better solution)
for (Article article : articles) ;
} finally {
em.close();
}
return articles;
}
的问题是,com.google.appengine.api.datastore.Key的对象不能获得序列化到JSON或XML,但我需要的物品的ID ......所以才有我使用long-type为id还是添加一个额外的字段,其中包含密钥?你对这个问题有更好的解决方案吗?
将Id作为字符串获取并不是问题,因此将密钥编组为json或xml是个问题。所以我正在寻找正确的模式来产生我的实体在JSON或XML **与**的ID。 – GreenPepper 2012-02-22 10:59:01
不确定你的意思。一旦密钥是一个字符串,就很容易序列化它......有许多工具/框架可以序列化json。我们使用Jersey(http://jersey.java.net/),这是一个符合jax-rs的框架。这对您的需求来说可能太重了,但使用起来非常简单。许多人也使用resteasy:http://www.jboss.org/resteasy – 2012-02-22 14:38:24
这不是我的问题。我只是在寻找一个好的模式。那么你的意思是我应该只添加一个只返回id的getter方法? – GreenPepper 2012-02-22 14:42:32