В Restlet 2.3 (SE) я пытаюсь использовать типы носителей для управления версиями. Моя текущая попытка включает регистрацию новых расширений в моем входящем маршруте:
@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"));
...
}
Интерфейс моего ресурса настраивается следующим образом:
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;
}
Затем я попытался указать типы носителей следующим образом:
http://localhost:8080/api/users?media=vnd.myapp.v1
Идея состоит в том, что если кто-то указывает тип мультимедиа как vnd.myapp.v1
, он получает representV1()
(JSON), если он указывает тип мультимедиа как vnd.myapp.v2
, он получает representV2()
(JSON) и (необязательно), если он не просит ничего конкретного, он получает representV2()
. С приведенной выше настройкой независимо от того, что запрашивается, я всегда возвращаю representV2()
.