如何向自定义MediaType
的实体发送GET请求?
例如,我想检索MyUserDTO
并将MediaType
设置为application/user+yml
。
现在我有两个分开的动作。我可以检索实体:
resource.get(MyUserDTO.class);
并且可以检索字符串:
resource.get(new MediaType("application", "user+yml");
但如何将它们结合起来?或者可能有一些技巧可以配置Restlet
来教他如何使用自定义MediaTypes。
答案 0 :(得分:1)
事实上,你有正确的方法,但你没有使用类MediaType
(new MediaType(name, description)
)的正确构造函数。
要使代码正常工作,您需要将其更改为:
resource.get(new MediaType("application/user+yml"));
在服务器端,你会得到这个:
@Get
public Representation getSomething() {
System.out.println(">> media types = " +
getRequest().getClientInfo().getAcceptedMediaTypes());
// Display this: media types = [application/user+yml:1.0]
(...)
}
您可以通过在注释Get
中添加值来利用Restlet的扩展支持。在您的情况下,您需要添加自定义扩展程序,如下所述:
public class MyApplication extends Application {
public MyApplication() {
getMetadataService().addExtension(
"myextension", new MediaType("application/user+yml"));
(...)
}
@Override
public Restlet createInboundRoot() {
(...)
}
}
现在您可以在服务器资源中使用扩展程序:
@Get("myextension")
public Representation getSomething() {
(...)
}
此方法将与预期的媒体类型application/user+yml
一起使用。
希望它可以帮到你, 亨利