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