【问题标题】:Inserting annotations into Retrofit request for Jackson将注释插入到杰克逊的改造请求中
【发布时间】:2016-11-01 16:35:25
【问题描述】:

我在 Android 应用程序中使用 Retrofit 2.1 和 Jackson 对使用 Jackson 反序列化的服务进行后调用。该服务期望传入的 json 看起来像:

{"@class":"com.servicepackagepath$OurClassName","prop1":"value1","prop2":"value2"}

然而,生成并发送到服务的 json 是:

{"prop1":"value1","prop2":"value2"}

结果为 500。改造签名如下所示:

@POST("apiName")
Call<String> apiName(@Body OurClassName ourClassName);

客户端的OurClassName 类与服务端的类不同。完全相同的签名,但它是本地的。

如何让 @class 注释插入到传出的 json 中?

【问题讨论】:

  • 我通过创建自定义 json 对象、插入注释、然后将反序列化的 gson 附加到我的对象的 json 表示并将 jsonobject 传递给服务来使其工作。它可以工作,但它完全是一个黑客,不应该是如何使用改造的,所以我不会为它创建一个答案。正确的方法是什么?

标签: java android jackson retrofit retrofit2


【解决方案1】:

好的,想通了。您需要添加到您的 Retrofit Builder 中:

.addConverterFactory(JacksonConverterFactory.create(
    new ObjectMapper().enableDefaultTyping(ObjectMapper.DefaultTyping.JAVA_LANG_OBJECT, JsonTypeInfo.As.PROPERTY)
))

然后在你的类声明之上做:

@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include= JsonTypeInfo.As.PROPERTY, property="@class")

【讨论】:

    猜你喜欢
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 2016-10-19
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 2016-08-07
    相关资源
    最近更新 更多