2014-06-22 2 views
1

Spring/Hibernate Java 백엔드에서 작동하는 ember-data를 어떻게 사용할 수 있는지 궁금합니다. 보통 JSON을 반환하기 위해 Jackson을 사용 하겠지만 jsonapi.org에서 요구하는 사양을 지원하지 않는 것으로 보입니다.Spring/Hibernate 백엔드가있는 ember-data

현재 빈은 이와 같은 계층 구조로 반환됩니다.

{ 
    "id" : 1, 
    "name" : "Bill", 
    "surname" : "Smith", 
    "address" : { 
    "id" : 23, 
    "number" : 21, 
    "street" : "Vincent st", 
    "state" : { 
     "id" : 44, 
     "name" : "Victoria" 
     "abbreviation" : "VIC" 
    } 
    "postcode" : 9000 
    } 
} 

나는이 구조에 붙어 있지 않다 그리고 그러나, 나는/직렬화 jsonapi 사양을 내 개체를 직렬화합니다 모든 잭슨 플러그인을 찾을 수없는, jsonapi에 적합하게 수정할 수 있습니다.

내 옵션에는 어떤 것들이 있습니까? 나는 ember- 데이터를위한 자신의 serializer/deserializer를 작성할 수 있지만 엄청난 고통이 될 것임을 알고있다. 분명히 자바 백엔드를 사용하는 다른 사람들이있다.

+1

: : 내 PersonController에 다음 requestmapping을 추가 http://springember.blogspot.de/2014/08/using-ember-data-restadapter-with.html –

답변

0

나는 백엔드로서 php를 사용하여 디자인 단계에서 새로운 것을 경험했지만, 나는 똑같은 문제가 있다고 생각하고 수정 된 모양을 찾았다. 당신은 잭슨을 어지럽히는 것이 어려운 접근법 일 것이라고 생각합니다. 그것은 엠버 측면에서 변화를 만드는 것이 훨씬 쉬운 것처럼 보입니다. 이 guide (http://lab.empirio.no/emberjs-say-hello-to-apigility.html)은 ember 데이터의 ActiveModelSerializer를 기반으로 js에 자체 serializer를 만든 다음 RestAdapter를 수정하는 방법에 대해 설명합니다. 이 예제에서는 이미 표준 ToDo 앱을 빌드하는 방법에 대해 논의하고 있습니다. 우리는 조작 "...

App.ApplicationSerializer = DS.ActiveModelSerializer.extend({ 
    primaryKey: 'todos_id', 

    extract: function(store, type, payload, id, requestType) { 
     this.extractMeta(store, type, payload); 

     if(payload._embedded) 
      payload = payload._embedded; 

     if(requestType == 'updateRecord' || requestType == 'createRecord'){ 
      var data = {}; 
      data[type.typeKey] = payload; 
      payload = data; 
     } 
     var specificExtract = "extract" + requestType.charAt(0).toUpperCase() + requestType.substr(1); 
     return this[specificExtract](store, type, payload, id, requestType); 
    } 
}); 

:

{"name":"Testing","is_completed":false} 

가 타다가 사용하는 동안 : 여기

{"todo":{"name":"Testing","is_completed":false}} 

몇 가지 동일한 코드의

문제는 백엔드는이 형식을 사용합니다 페이로드를 확장하여 (RESTAdapter에서 복사) createRecord-function이 이 같은 어댑터에 havior : "

createRecord: function(store, type, record) { 
     var data = {}; 
     var serializer = store.serializerFor(type.typeKey); 
     serializer.serializeIntoHash(data, type, record, { includeId: true }); 
     return this.ajax(this.buildURL(type.typeKey), "POST", { data: data[type.typeKey] }); 
    }, 

나는 여기에 많이 실종 내가 아직 응용 프로그램을 구축하기 위해 시도하지 않은 때문에 아마 몇 가지 단계를 누락 확신하지만이 문제였다 I 나는 엠버에 전념하기 전에 내가 해결할 필요가 있음을 알고 있었고 이것이 실행 가능한 해결책처럼 보였다. 나는 어쨌든 당신을위한 옳은 방향으로 나아 가기를 바랍니다.

편집 : 표준을 고수하기 위해 형식을 변경하고 싶지는 않지만 실제로는 JSON API 및 콘텐츠 유형에 대한 표준이 아직 없습니다. 어쨌든 받아 들여지지는 않습니다. 이 가이드는 HAL + JSON을 사용하는데 jsonapi.org에서 본 것과 다르지 않습니다. 어쨌든 모든 사람들은 백엔드 언어 나 프레임 워크에 관계없이이 문제를 겪고있는 것으로 보입니다. 나는 엠버 팀이이를 인식하고 유연하게하려고 노력하고 있다고 생각합니다. 또한, ember-data는 여전히 베타 버전이기 때문에, 나는 변화하는 라이브러리를 지원하기 위해 자바 측을 작성하는 대신에 변경 작업을 수행하는 것이 더 쉽다. 누가 알아? 어쩌면 ember-data는 로드맵에서 아무런 언급도 듣지 못했지만 1.0 버전 이전에 다른 백엔드에 대한 더 나은 지원을 제공 할 것입니다.

1

DataFX (javaFX 사용)로 json을 구문 분석하는 문제에 익숙해 보입니다. json도 Spring에서 생성되었습니다 ... Person을 래핑 한 페이지를 반환하고 구문 분석 할 수있는 json을 만듭니다. 그냥 내 2cts ...이 게시물이 당신에게 몇 가지 힌트를 제공한다

@RequestMapping(value="/persons", method=RequestMethod.GET, headers="Accept=application/json, application/xml") 
public @ResponseBody Page<Person> getPersons(
    @RequestParam(value="page",required=false,defaultValue="0") String page, 
    @RequestParam(value="size",required=false,defaultValue="20") String size, 
    @RequestParam(value="orderby",required=false,defaultValue="name") String orderby){ 
     PersonRepository repository = context.getBean(PersonRepository.class); 
     final PageRequest pr = new PageRequest(Integer.parseInt(page), Integer.parseInt(size), Direction.ASC, orderby); 
     Page<Person> persons = (Page<Person>) repository.findAll(pr); 
     return persons; 
} 
관련 문제