2015-01-31 6 views
0

저는 웹 xml/json api로 끝나는 작은 프로젝트를 시작하려고합니다. Java로 작성하고, restlet 라이브러리를 사용할 것이다.XML 및 JSON 웹 API : POJO에서 자동 매핑 하시겠습니까?

xml/json 이중성에 어떻게 접근합니까? JAXB를 사용하여 pojos를 xml (및 back)으로 "변환"할 수 있다는 것을 알고 있지만 json을 위해 이것을 자동화하는 방법은 무엇입니까? 내가 사용할 수있는 restlet 라이브러리에 어떤 기능이 있습니까? 내

public class MyServerResource extends ServerResource { 
    @Get 
    public List<MyPojo> getList() { 
     List<MyPojo> list = (get list from backend for example) 
     return list; 
    } 

    @Post 
    public MyPojo addPojo(Pojo pojo) { 
     addPojoInBackend(pojo 

     getResponse().setLocationRef(getUri() + field.getId()); 
     getResponse().setStatus(Status.SUCCESS_CREATED); 

     return pojo; 
    } 
} 

당신은 미디어 유형 (예 : 콘텐츠 형식)을 지정할 필요가 없습니다 :

답변

1

으로 Restlet은 아래에 설명 된대로 직접 REST 주석 방법의 수준에서 서버 자원 내에서 POJO들과 함께 작업 할 수 있습니다 주석의 내용

이러한 코드를 처리하기 위해 Restlet은 작업을 수행하는 일반 변환 기능을 제공합니다. Restlet 확장은이 기능에 대해 다른 구현을 제공합니다. RESTful 애플리케이션에 XML과 JSON을 둘 다 원한다면 Jackson의 확장 기능을 사용해야한다고 생각한다. Jackson (http://wiki.fasterxml.com/JacksonHome)은 POJO를 XML, JSON 및 YAML과 같은 다양한 형식으로 변환 할 수있는 도구입니다.

이 기능을 사용하려면 클래스 경로에 Jackson 확장의 JAR 파일 (org.restlet.ext.jackson)을 넣고 위에서 설명한 프로그래밍 방식을 사용하면됩니다. 여기 그것이 작동하는 방법에 대한 자세한 내용은 다음과 같습니다

  • 당신은 (요청의 헤더 Content-Type 설정) 모두 JSON과 XML 컨텐츠를 보낼 수있을 것으로 Restlet 자동으로 주석에서 예상되는 콩이 컨텐츠를 변환합니다 방법.

    POST /myresource 
    Content-type: application/json 
    { "id":"myid", ... } 
    
  • 이/전환 응답이 예상되는 내용을 선택하려면 헤더 Accept에 따라 (REST의 콘텐츠 협상) conneg을 활용할 수 있습니다. application/json을 지정하면 JSON 콘텐츠가 수신되고 XML은 applicaiton/xml이됩니다.

    GET /myresource 
    Accept: application/json 
    { "id":"myid", ... } 
    
    GET /myresource 
    Accept: application/xml 
    <elt><id>myid> ... </elt> 
    
  • 당신은으로 Restlet도 수신 할 내용을 선택하는 쿼리 매개 변수 media (표준되지 않음)를 지원하는 것을 알 수 있습니다. json을 지정하면 JSON 콘텐츠가 다시 수신되고 xml은 XML 콘텐츠가 수신됩니다.

GET /myresource?media=json 
{ "id":"myid", ... } 

GET /myresource?media=xml 
<elt><id>myid> ... </elt> 

당신은이 메커니즘은 또한으로 Restlet와 서버 측에서 지원되는 것을 알 수 있습니다, 마무리합니다. 즉, 콩으로 직접 작업 할 수 있습니다. 아래에 설명 된대로이 기능은,으로 Restlet 주석 인터페이스를 사용할 수 있습니다

public interface MyResource { 
    @Get 
    List<MyPojo> getList(); 

    @Post 
    MyPojo addPojo(Pojo pojo); 
} 

당신은이 인터페이스를 사용하여 아래와 같이 :

ClientResource cr = new ClientResource("http://(...)/myresource"); 
MyResource myResource = cr.wrap(MyResource.class); 
// List 
List<Pojo> list = myResource.getList(); 
// Add 
Pojo pojo = new Pojo(); 
pojo.setId("myid"); // for example 
(...) 
Pojo returnedPojo = myResource.add(pojo); 

돈 '이 클라이언트 클래스 경로 응용 프로그램 확장 잭슨에 넣어하는 것을 잊지 .

희망 하시겠습니까? 티에리