使Jersey RESTful服务器符合Ember Data和JSON API

时间:2013-07-12 05:23:11

标签: rest ember.js jersey ember-data json-api

我目前运行的服务器提供如下数据:

单一实体

{"id":"11","name":"hello",....}

实体列表

[{single entity format},{},...]

但是,Ember Data希望数据遵循JSON API spec,格式为

{"entity":{"id":"11","name":"hello",....}} OR {"entities":[{},{},{}...]}

否则会返回错误:

Your server returned a hash with the key 0 but you have no mapping for it

我目前有一个responseFactory,它将构建响应作为一个地图,其中键是ember模型(“users”/“user”)实体/列表和值是列表/实体本身

有更好/更清洁的方式吗?

2 个答案:

答案 0 :(得分:3)

请在github上查看此项目:https://github.com/brunorg/ember-java

你需要的是@JsonRootName杰克逊注释。我相信这是更清洁的方式。

答案 1 :(得分:1)

在你的情况下尝试使用类似的类:

import java.util.ArrayList;
import java.util.HashMap;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonRootName;

@JsonRootName("entity")
public class Entity {
   @JsonProperty
   public ArrayList<HashMap> entity = new ArrayList<HashMap>(); 

   public Entity() {    }

   public User(HashMap<String,Object> fields) {
      entity.add(fields);
   }
}

并生产:

@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Entity producePost(Object object) {
    HashMap<String, Object> f = new HashMap<String,Object>();
    f.put("id", "11");
    f.put("name", "hello...");
    return new Entity(f);
}

它允许以Ember可以接受的格式生产 像这样

 {
  "entity" : [ {
    "id" : "11",
    "name" : "hello...."
  } ]
}