Java Restlet:如何通过设置自定义MediaType检索DTO?
如何使用自定义Java Restlet:如何通过设置自定义MediaType检索DTO?,java,restlet,restlet-2.0,Java,Restlet,Restlet 2.0,如何使用自定义MediaType发送实体的GET请求 例如,我想检索MyUserDTO并将MediaType设置为application/user+yml 现在我有两个独立的动作。我可以检索实体: resource.get(MyUserDTO.class); 并可以检索字符串: resource.get(new MediaType("application", "user+yml"); 但如何将它们结合起来呢?或者,可能有一些技巧可以配置Restlet来教他如何使用自定义媒体类型。事实上,您
MediaType
发送实体的GET请求
例如,我想检索MyUserDTO
并将MediaType
设置为application/user+yml
现在我有两个独立的动作。我可以检索实体:
resource.get(MyUserDTO.class);
并可以检索字符串:
resource.get(new MediaType("application", "user+yml");
但如何将它们结合起来呢?或者,可能有一些技巧可以配置
Restlet
来教他如何使用自定义媒体类型。事实上,您有正确的方法,但没有使用类MediaType
的正确构造函数(新媒体类型(名称、描述)
)
要使代码正常工作,需要将其更改为:
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
希望它能帮助你,
蒂埃里