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

希望它能帮助你, 蒂埃里