Restlet:如何通过设置自定义MediaType来检索DTO?

时间:2014-10-22 18:20:59

标签: java restlet restlet-2.0

如何向自定义MediaType的实体发送GET请求?

例如,我想检索MyUserDTO并将MediaType设置为application/user+yml

现在我有两个分开的动作。我可以检索实体:

resource.get(MyUserDTO.class);

并且可以检索字符串:

resource.get(new MediaType("application", "user+yml");

但如何将它们结合起来?或者可能有一些技巧可以配置Restlet来教他如何使用自定义MediaTypes。

1 个答案:

答案 0 :(得分:1)

事实上,你有正确的方法,但你没有使用类MediaTypenew 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一起使用。

希望它可以帮到你, 亨利