2016-03-03 47 views
1

我怎样才能使用的球衣采用的Restlet尽可能的接受报头字段的版本我们的REST API资源的Restlet版本:使用accept头

// Jersey 
@GET 
@Path("test") 
@Produces("application/myapp.v1+json;charset=utf-8") 
public pojo.v1.PersonPoJo testV1() 
{ 
    return new pojo.v1.PersonPoJo("Smith", "Jeff", 34); 
} 

@GET 
@Path("test") 
@Produces("application/myapp.v2+json;charset=utf-8") 
public pojo.v2.PersonPoJo testV2() 
{ 
    return new pojo.v2.PersonPoJo("Smith", "Jeff", 34, "[email protected]"); 
} 


// Restlet 
@GET("json") 
public pojo.PersonPoJo test() 
{ 
    return new pojo.PersonPoJo("Smith", "Jeff", 34); 
} 

回答

1

要做到这一点,你需要定义自定义扩展为你的两个版本。这可以在应用程序内完成:

public class MyApplication extends Application { 
    public MyApplication() { 
     getMetadataService().addExtension(
      "myapp.v1", new MediaType("application/myapp.v1+json")); 
     getMetadataService().addExtension(
      "myapp.v2", new MediaType("application/myapp.v2+json")); 
     (...) 
    } 

    @Override 
    public Restlet createInboundRoot() { 
     (...) 
    } 
} 

然后你就可以直接使用这些扩展的服务器资源的注释中:

@Get("myapp.v1") 
public pojo.v1.PersonPoJo testV1() 
{ 
    return new pojo.v1.PersonPoJo("Smith", "Jeff", 34); 
} 

@Get("myapp.v2") 
public pojo.v2.PersonPoJo testV2() 
{ 
    return new pojo.v2.PersonPoJo("Smith", "Jeff", 34, "[email protected]"); 
} 

详情请参见这个问题:

相关问题