【发布时间】:2018-08-25 18:47:57
【问题描述】:
我有一个看起来像这样的 Kotlin 数据类
@Type("event")
@JsonNaming(PropertyNamingStrategy.KebabCaseStrategy::class)
open class Event(
@PrimaryKey
@Id(IntegerIdHandler::class)
var id: Int? = null,
var identifier: String? = null,
var name: String? = null,
var latitude: Double? = null,
var longitude: Double? = null,
var locationName: String? = null,
var startsAt: String? = null,
var endsAt: String? = null,
var timezone: String? = null,
var description: String? = null,
var logoUrl: String? = null,
var organizerName: String? = null,
var organizerDescription: String? = null,
var ticketUrl: String? = null,
var privacy: String? = null,
var type: String? = null,
var topic: String? = null,
var subTopic: String? = null,
var codeOfConduct: String? = null,
var email: String? = null,
var schedulePublishedOn: String? = null,
var searchableLocationName: String? = null,
var state: String? = null,
var isSessionsSpeakersEnabled: Boolean = false,
var thumbnailImageUrl: String? = null,
var originalImageUrl: String? = null,
var largeImageUrl: String? = null,
var iconImageUrl: String? = null,
var createdAt: String? = null,
var deletedAt: String? = null,
@Relationship("event-copyright")
var eventCopyright: Copyright? = null,
@Relationship("speakers-call")
var speakersCall: SpeakersCall? = null,
@Relationship("social-links")
var socialLinks: RealmList<SocialLink>? = null
) : RealmObject() {
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
if (other !is Event) return false
if (id != other.id) return false
if (identifier != other.identifier) return false
if (name != other.name) return false
return true
}
override fun hashCode(): Int {
var result = id ?: 0
result = 31 * result + (identifier?.hashCode() ?: 0)
result = 31 * result + (name?.hashCode() ?: 0)
return result
}
override fun toString(): String {
return "Event(id=$id, identifier=$identifier, name=$name)"
}
}
我使用 Jackson 作为 Mapper 将我的 JSON 映射到这个 Event 模型中。
在模型中,有一个属性isSessionsSpeakersEnabled。等效的 JSON 属性键是 "is-sessions-speakers-enabled"。当模型用 Java 编写时,给定的类映射非常好,但是一旦我将其转换为 Kotlin,使用的命名策略显然将 isSessionsSpeakersEnabled 更改为 "sessions-speakers-enabled" 而不是 "is-sessions-speakers-enabled"。为什么会发生这种情况,我该如何解决?
【问题讨论】:
-
你试过使用@JsonProperty 吗?
-
我不想使用@JsonProperty。这就是为什么存在命名策略以对每个字段进行通用命名的原因
-
@SriramR,是的,这确实是命名策略存在的原因,但
@JsonProperty等注释存在的原因是因为命名策略可能并不总是与您的用例完美匹配。@JsonProperty是对您问题的简单直接的回答;否则你不妨将你的类恢复为 Java。 -
但是这里的命名策略非常适合我的用例。 java 中的字段名称与 kotlin 中的字段名称相同。所以命名策略应该和java中的一样
标签: java android json jackson kotlin