Retrofit 或 Jackson ObjectMapper 将“aId”属性映射为小写“aid”
Posted
技术标签:
【中文标题】Retrofit 或 Jackson ObjectMapper 将“aId”属性映射为小写“aid”【英文标题】:Retrofit or Jackson ObjectMapper maps "aId" property to lowercase "aid" 【发布时间】:2019-11-25 05:54:29 【问题描述】:我使用Jackson 2.9.2
和Retrofit 2.1.0
进行一些POST
操作,JSONArray
作为html-Header
参数。
API 定义了一个值为aId
。无论我尝试什么,我的 JSON property
总是 转换为小写 (aid
)。
我用abId
测试了我的相同代码,它可以工作...任何线索,我的配置错误或哪个约定(?)反对这个属性名称?
//ObjectMapper initialization
ObjectMapper().disable(SerializationFeature.FAIL_ON_EMPTY_BEANS)
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
//the data class
import com.fasterxml.jackson.annotation.JsonProperty
data class MyClass(
@JsonProperty
val aId: String? = null, //<-- not working
@JsonProperty
val abId: String? = null //working!
)
//Retrofit call
import retrofit2.http.Body
@POST("log")
fun sendLog(@Body logs: List<MyClass>): Call<MyCall>
//JSON Result in HTML Header
[
"aid":"some_value", //should be "aId"
"abId":"some_value" //is correct
]
我尝试了以下注释:
@SerializedName("aId")
@JsonProperty("aId")
@JsonRawValue
@JsonAlias
【问题讨论】:
试试看Usage of Jackson @JsonProperty annotation for kotlin data classes @MichałZiober 谢谢老兄,成功了!将此作为答案发布以获取赏金 我不确定,我应该收到它们以链接到另一个很好的答案。 *** 不喜欢重复的答案,所以,我认为,一些管理员应该将您的问题标记为重复并指向链接的问题/答案。如果您真的想感谢我,请支持我与Jackson
或JSON
相关的一些答案,当然如果您认为他们应得的。
【参考方案1】:
试试这个@get:JsonProperty("aId")
【讨论】:
抱歉,我没有检查上面的 cmets。我在我的项目中遇到了同样的问题,所以我已经知道答案了。【参考方案2】:请参阅 Michael Ziober 发布的答案链接Usage of Jackson @JsonProperty annotation for kotlin data classes
所描述的问题是Jackson's
默认行为不扫描私有字段的结果。可以使用@JsonAutoDetect
更改此行为
@JsonAutoDetect(fieldVisibility = Visibility.ANY)
data class MyClass(
@JsonProperty
val aId: String? = null,
@JsonProperty
val abId: String? = null
)
【讨论】:
以上是关于Retrofit 或 Jackson ObjectMapper 将“aId”属性映射为小写“aid”的主要内容,如果未能解决你的问题,请参考以下文章
常见的解析器(Gson 、Jackson 、wire、Moshi、Simple XML、Scalars )
如何在 Retrofit 库中将 YAML 响应正文解析为 POJO?
使用Jackson“意外令牌(START_OBJECT)使用LocalDateTime将JSON解析为POJO,预期VALUE_STRING:预期的数组或字符串。”