I have an enum like
enum class Gender(val value: String) {
MALE("male"),
FEMALE("female"),
DIVERSE("diverse"),
UNKNOWN("unknown");
companion object {
fun fromValue(value: String): Gender {
entries.forEach { v ->
if (v.value == value) {
return v
}
}
throw IllegalArgumentException("No Gender found for value=${value}")
}
}
}
This is part of a User model:
@Table(name = "users")
class User (
@Column("gender")
var gender: Gender = Gender.DIVERSE,
@Column("first_name")
var firstName: String? = null,
@Column("last_name")
var lastName: String? = null,
@Column("country_code")
var countryCode: String? = null,
@Column("phone_number")
var phoneNumber: String? = null,
@Column("password")
var password: String? = null,
@Column("email")
var email: String? = null
): BaseEntity()
I have registered custom @ReadingConvertes and @WritingConverters. The Writing converter seems to work, but the reading converter doesn't seem to work.
UPDATE: Here is the writing converter. This component works fine and the lower case string values are written in the db.
@WritingConverter
class GenderWritingConverter : Converter<Gender, String> {
override fun convert(source: Gender): String =
source.value
}
Here is the Readingconverter. This converter is not called, even if it is registered as a custom converter.
@ReadingConverter
class GenderReadingConverter : Converter<String, Gender> {
override fun convert(source: String): Gender {
return Gender.fromValue(source)
}
}
Here is how I am registering it to the r2dbc config:
@Configuration
class R2dbcConfig(
private val connectionFactory: ConnectionFactory
): AbstractR2dbcConfiguration() {
override fun connectionFactory(): ConnectionFactory = connectionFactory
@Bean
override fun r2dbcCustomConversions(): R2dbcCustomConversions =
R2dbcCustomConversions(storeConversions,
mutableListOf(GenderReadingConverter(),GenderWritingConverter()))
}
While converting the value from the db, I have following exception:
java.lang.IllegalArgumentException: No enum constant Gender.diverse