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值。