public class AdditionalItemsDeserializer extends JsonDeserializer<ArraySchema.AdditionalItems>
{
@Override
public ArraySchema.AdditionalItems deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException
{
TreeNode node = jp.readValueAsTree();
if (node instanceof ObjectNode) {
// not clean, but has to do...
ObjectMapper mapper = (ObjectMapper) jp.getCodec();
JsonSchema innerSchema = mapper.treeToValue(node, JsonSchema.class);
return new ArraySchema.SchemaAdditionalItems(innerSchema);
}
if (node instanceof BooleanNode) {
BooleanNode booleanNode = (BooleanNode) node;
if (booleanNode.booleanValue()) {
return null; // "additionalItems":true is the default
}
return new ArraySchema.NoAdditionalItems();
}
throw new JsonMappingException("additionalItems nodes can only be of "
+ "type Boolean or Object; instead found something starting with token " + node.asToken());
}