Created
July 30, 2020 05:14
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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) | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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