我有一个Json模型需要设置两个中的至少一个字段。换句话说,它不应该允许所有null
字段,同时不应要求指定两个字段。
杰克逊有没有办法解决这个问题?
答案 0 :(得分:2)
要做出的关键决定是您描述的约束是系统/技术约束,还是应用程序的业务逻辑指定的约束。 Jackson仅仅是序列化/反序列化库。验证序列化数据的语义正确性通常超出了其范围。
当然,您可以使用自定义反序列化程序来验证输入的正确性,并在无效输入上抛出JsonParseException
。但是,这种方法可能会使解析器处于不稳定状态。因此,它应该用于捕获与序列化本身相关的问题,例如尝试反序列化对象的不兼容版本,其中丢弃整个输入通常是有效的解决方案。
对于大多数情况,我建议将用户输入的任何深入验证留给您的实际应用程序代码。保持串行器和反序列化器的实现尽可能简单 - 即使应用程序逻辑发生变化,它们也会保持不变。
尝试将实际业务逻辑合并到JSON解析器中只会使您的架构复杂化。它会混淆系统错误的处理,例如不兼容对象的序列化,以及应用程序错误,例如恶意客户端同时填写与不同用户组相关的字段。