Commit 7dfd4538 authored by mokj's avatar mokj
Browse files

Improved support for title and description on root in schema

parent 160e5651
Loading
Loading
Loading
Loading
+22 −1
Original line number Diff line number Diff line
@@ -744,7 +744,7 @@ class JsonSchemaGenerator
  }


  def generateJsonSchema[T <: Any](clazz: Class[T]): JsonNode = {
  def generateJsonSchema[T <: Any](clazz: Class[T], title:Option[String] = None, description:Option[String] = None): JsonNode = {

    val rootNode = JsonNodeFactory.instance.objectNode()

@@ -752,6 +752,27 @@ class JsonSchemaGenerator
    rootNode.put("$schema", JsonSchemaGenerator.JSON_SCHEMA_DRAFT_4_URL)
    //rootNode.put("id", "http://my.site/myschema#")

    // Add schema title
    title.orElse {
      Some(generateTitleFromPropertyName(clazz.getSimpleName))
    }.flatMap {
      title =>
        // Skip it if specified to empty string
        if ( title.isEmpty) None else Some(title)
    }.map {
      title =>
        rootNode.put("title", title)
        // If root class is annotated with @JsonSchemaTitle, it will later override this title
    }

    // Maybe set schema description
    description.map {
      d =>
        rootNode.put("description", d)
        // If root class is annotated with @JsonSchemaDescription, it will later override this description
    }


    val definitionsHandler = new DefinitionsHandler
    val rootVisitor = new MyJsonFormatVisitorWrapper(rootObjectMapper, node = rootNode, definitionsHandler = definitionsHandler, currentProperty = None)
    rootObjectMapper.acceptJsonFormatVisitor(clazz, rootVisitor)
+1 −1
Original line number Diff line number Diff line
@@ -388,7 +388,7 @@ class JsonSchemaGeneratorTest extends FunSuite with Matchers {

    val jsonNode = assertToFromJson(jsonSchemaGenerator, testData.pojoWithCustomSerializer)
    val schema = generateAndValidateSchema(jsonSchemaGenerator, testData.pojoWithCustomSerializer.getClass, Some(jsonNode))
    assert( schema.asInstanceOf[ObjectNode].fieldNames().toList == List("$schema")) // Empyt schema due to custom serializer
    assert( schema.asInstanceOf[ObjectNode].fieldNames().toList == List("$schema", "title")) // Emptyt schema due to custom serializer
  }

  test("object with property using custom serializer not overriding JsonSerializer.acceptJsonFormatVisitor") {