Skip to content

Instantly share code, notes, and snippets.

@bseib
Created July 30, 2020 05:14
Show Gist options
  • Save bseib/9039cab6335dd1989b5c3a7d80c5943c to your computer and use it in GitHub Desktop.
Save bseib/9039cab6335dd1989b5c3a7d80c5943c to your computer and use it in GitHub Desktop.
Don't let Jackson drop the "is" prefix when serializing a Kotlin class to JSON
// adapted from https://stackoverflow.com/a/51419993/516910
package to.pubsub.util
import com.fasterxml.jackson.databind.PropertyNamingStrategy
import com.fasterxml.jackson.databind.cfg.MapperConfig
import com.fasterxml.jackson.databind.introspect.AnnotatedField
import com.fasterxml.jackson.databind.introspect.AnnotatedMethod
class BooleanNamingStrategy : PropertyNamingStrategy() {
override fun nameForGetterMethod(config: MapperConfig<*>, method: AnnotatedMethod, defaultName: String): String {
if (method.hasReturnType() && (method.rawReturnType.name == "boolean" || false) && method.name.startsWith("is")) {
return method.name
}
else {
return super.nameForGetterMethod(config, method, defaultName)
}
}
override fun nameForField(config: MapperConfig<*>, field: AnnotatedField, defaultName: String): String {
if (field.rawType.name == "boolean" && field.name.startsWith("is")) {
return field.name
}
else {
return super.nameForField(config, field, defaultName)
}
}
}
// Wherever you setup your main object mapper, register this naming strategy
val myMainObjectMapper = ObjectMapper().apply {
setPropertyNamingStrategy(BooleanNamingStrategy())
// more setting
// etc..
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment