如果给出了额外的字段,杰克逊反序列化应该会成功但如果缺少字段则会失败

时间:2013-07-29 13:47:44

标签: json scala jackson

我有这个案例类

case class Contact(id: String, firstName: String, lastName: String)

我希望Jackson Scala对象映射器在缺少三个字段中的任何一个时失败,例如:

val mapper = new ObjectMapper() with ScalaObjectMapper
mapper.registerModule(DefaultScalaModule)
mapper.readValue[Contact](""""{"id":"123","firstName":"John"}""")

但在Json字符串中给出其他字段时会成功,例如:

mapper.readValue[Contact](""""{"id":"123","firstName":"John","lastName":"Test","age":"24"}""")

我确实尝试使用@JsonIgnoreProperties(ignoreUnknown = true)mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false),但这两个选项似乎都禁用了整个验证,而不是忽略其他字段。

1 个答案:

答案 0 :(得分:2)

@JsonProperty(required=true)是执行此操作的正确方法,但尚未实现反序列化。

Javadoc says

  

请注意,从2.0开始,BeanDeserializer不使用此属性:预计会为稍后的次要版本添加支持。

此功能的票证:https://github.com/FasterXML/jackson-databind/issues/230

我会在反序列化后立即检查所需的值,但也许其他人可以提出解决方法。