In Restlet 2.3 (SE) I am trying to use media types to control versions. My current attempt involves registering new extensions in my inbound route:
@Override
public Restlet createInboundRoot() {
...
getTunnelService().setExtensionsTunnel(true);
getMetadataService().addExtension("vnd.myapp.v1", MediaType.valueOf("application/vnd.myapp.v1+json"));
getMetadataService().addExtension("vnd.myapp.v2", MediaType.valueOf("application/vnd.myapp.v2+json"));
...
}
My resource interface is then setup as follows:
public interface UsersResource {
@Options
void getCorsSupport();
@Get("vnd.myapp.v1")
Collection<User> representV1() throws Exception;
// Should be the default if */* is specified
@Get("json | vnd.myapp.v2")
Collection<User> representV2() throws Exception;
}
I then tried specifying the media types as follows:
http://localhost:8080/api/users?media=vnd.myapp.v1
The idea is that if somebody specifies the media type as vnd.myapp.v1
they get representV1()
(JSON), if they specify the media type as vnd.myapp.v2
they get representV2()
(JSON) and (optionally) if they ask for nothing specific they get representV2()
. With the above setup no matter what is requested I always get back representV2()
.