【问题标题】:How does Restlet client handle media type of request?Restlet 客户端如何处理媒体类型的请求?
【发布时间】:2014-07-01 01:24:47
【问题描述】:

我有几个关于 Restlet 客户端如何处理媒体类型标头的新手问题:

  1. 如果我传入 a) POJO 或 b) InputStream 实例类型的实体,Restlet 客户端会在“content-type”标头中添加什么? “接受”标头是什么?
  2. 如果我想在 HTTP 正文中传输 JSON 格式的 POJO,我是否需要序列化 ​​POJO 并将其作为 JSON 字符串传递,或者我可以只传递 POJO,然后 Restlet 将完成其余的工作?如果是前一种情况,是否需要指定“content-type”标头以及如何指定?

非常感谢!

【问题讨论】:

    标签: java json http-headers restlet


    【解决方案1】:

    如果依赖ClientResource类,可以在put调用中添加MediaType参数,如

    put(myPojo, MediaType.APPLICATION_JSON);
    

    更新 实际上,额外的媒体类型参数定义了远程资源预期的接受结果类型,但不适用于发送的实体。

    对发送的实体/POJO 的媒体类型的控制基于 ConverterService 默认设置,这取决于您的类路径中可用的扩展及其各自的顺序。

    您可以通过直接调用

    ClientResource cr = new ClientResource("http://targetDomain/path");
    cr.put(cr.toRepresentation(myPojo, new Variant(MediaType.APPLICATION_JSON));
    

    您还需要在类路径及其依赖项中添加 org.restlet.ext.jackson 扩展。 XStream 扩展是另一种选择。

    【讨论】:

    • 那么使用 MediaType.APPLICATION_JSON 作为第二个参数,myPojo 会自动序列化为 json 字符串吗?这是通过restlet扩展完成的吗?
    • 抱歉,我最初的回复不正确,请参阅上面的更新。
    • 非常感谢,这解决了我的问题。通过进一步阅读 api 文档,我将直接传入 JacksonRepresentation 实体,但不确定是否不鼓励这样做。
    • @JeromeLouvel 与此问题/答案相关,您能帮我解决我们面临的这个问题吗:stackoverflow.com/questions/29207489/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    相关资源
    最近更新 更多