我有一个看起来像这样的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映射到此事件模型中。
在模型中,有一个属性isSessionsSpeakersEnabled
。等效的JSON属性键是"is-sessions-speakers-enabled"
。当模型用Java编写时,给定的类映射非常好,但是一旦我将其转换为Kotlin,使用的命名策略显然将isSessionsSpeakersEnabled
更改为"sessions-speakers-enabled"
而不是"is-sessions-speakers-enabled"
。为什么会发生这种情况?如何解决?
答案 0 :(得分:0)
对于任何想知道如何修复它而不添加太多样板文件的人,
发生此错误是因为Kotlin删除了&#34; is&#34;在所有getter方法生成之前。这导致我的解析问题,因为我的json包含&#34;是&#34;字首。所以我需要在这里使用@JsonProperty
。
但是,如果我将@JsonProperty()
添加到一个字段,我将不得不将@JsonProperty()
添加到每个字段,这只是凌乱。所以我补充道
而是@field:JsonProperty()
。这使我能够获得我所需的功能,而无需在代码中添加太多样板,并且NamingStrategy负责其余的字段。
我希望这很清楚。