Kotlin - 配置 Jackson 以在字段与特定值不匹配时抛出异常
Kotlin - Configure Jackson to throw an exception when a field does not match with a certain value
我有一项服务接收 JSON 内容如下:
{
"name": "test",
"gender": "NOT_VALID"
}
JSON 应该映射到这个对象“人”
data class Person(var name: String, var gender: Gender)
Person 有一个名字(字符串),Gender 是一个枚举,例如:
enum class Gender() {
Male,
Female,
NotExplicit
}
我正在尝试实现一个映射器,当给定的 Gender 无法与属于枚举的显式值匹配时,该映射器会失败。
例如,如果我尝试做这样的事情:
ObjectMapper.personValidate(text: String): Person =
try {
val mapper = ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
val readValue: Person = mapper.readValue(text, Person::class.java)
val person: Person = mapper.readValue(ByteArrayInputStream(text.toByteArray()), Person::class.java)
person
} catch (e: Exception) {
when (e) {
is JsonParseException, is JsonMappingException -> {
throw PersonException()
}
else -> throw e
}
}
我希望出现异常而不是 Person 对象。
当值不匹配时,此代码现在将性别映射为 null。
有线索吗?
您无需执行任何操作。如果您尝试将这样的 JSON 反序列化为您的 Person
class,则会抛出异常,因为 Jackson 无法将字符串 NOT_VALID
反序列化为有效的 Gender
值。
我有一项服务接收 JSON 内容如下:
{
"name": "test",
"gender": "NOT_VALID"
}
JSON 应该映射到这个对象“人”
data class Person(var name: String, var gender: Gender)
Person 有一个名字(字符串),Gender 是一个枚举,例如:
enum class Gender() {
Male,
Female,
NotExplicit
}
我正在尝试实现一个映射器,当给定的 Gender 无法与属于枚举的显式值匹配时,该映射器会失败。 例如,如果我尝试做这样的事情:
ObjectMapper.personValidate(text: String): Person =
try {
val mapper = ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
val readValue: Person = mapper.readValue(text, Person::class.java)
val person: Person = mapper.readValue(ByteArrayInputStream(text.toByteArray()), Person::class.java)
person
} catch (e: Exception) {
when (e) {
is JsonParseException, is JsonMappingException -> {
throw PersonException()
}
else -> throw e
}
}
我希望出现异常而不是 Person 对象。
当值不匹配时,此代码现在将性别映射为 null。
有线索吗?
您无需执行任何操作。如果您尝试将这样的 JSON 反序列化为您的 Person
class,则会抛出异常,因为 Jackson 无法将字符串 NOT_VALID
反序列化为有效的 Gender
值。