Commit 06047f94 authored by mokj's avatar mokj
Browse files

Improved required property support

parent c0cce8d0
Loading
Loading
Loading
Loading
+15 −7
Original line number Diff line number Diff line
@@ -215,6 +215,14 @@ class JsonSchemaGenerator(rootObjectMapper: ObjectMapper) {
    }


    private def getRequiredArrayNode(objectNode:ObjectNode):ArrayNode = {
      Option(objectNode.get("required")).map(_.asInstanceOf[ArrayNode]).getOrElse {
        val rn = JsonNodeFactory.instance.arrayNode()
        objectNode.set("required", rn)
        rn
      }
    }

    override def expectObjectFormat(_type: JavaType) = {

      val subTypes: List[SubTypeAndTypeName[_]] = Option(_type.getRawClass.getDeclaredAnnotation(classOf[JsonSubTypes])).map {
@@ -258,13 +266,7 @@ class JsonSchemaGenerator(rootObjectMapper: ObjectMapper) {

                propertiesNode.set(subTypeSpecifierPropertyName, enumObjectNode)

                val requiredNode:ArrayNode = Option(propertiesNode.get("required")).map(_.asInstanceOf[ArrayNode]).getOrElse {
                  val rn = JsonNodeFactory.instance.arrayNode()
                  objectNode.set("required", rn)
                  rn
                }

                requiredNode.add(subTypeSpecifierPropertyName)
                getRequiredArrayNode(objectNode).add(subTypeSpecifierPropertyName)

                None
            }
@@ -304,6 +306,12 @@ class JsonSchemaGenerator(rootObjectMapper: ObjectMapper) {

                objectMapper.acceptJsonFormatVisitor(propertyType, createChild(thisPropertyNode))

                // For some types we must set requeired
                val rawClass = writer.getType.getRawClass
                if ( rawClass.isPrimitive && rawClass.isAssignableFrom(classOf[Boolean])) {
                  getRequiredArrayNode(thisObjectNode).add(propertyName)
                }

              }

              override def optionalProperty(name: String, handler: JsonFormatVisitable, propertyTypeHint: JavaType): Unit = {