Commit 32c899e0 authored by Morten Kjetland's avatar Morten Kjetland Committed by GitHub
Browse files

Merge pull request #7 from jmf-tls/add-string-pattern

Added support for @Pattern in String properties
parents 23a146c4 3bea6f4d
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -4,7 +4,7 @@ import java.lang.reflect.{Field, Method, ParameterizedType}
import java.time.{LocalDate, LocalDateTime, LocalTime, OffsetDateTime}
import java.util
import java.util.Optional
import javax.validation.constraints.{Max, Min, NotNull, Size}
import javax.validation.constraints.{Pattern, Max, Min, NotNull, Size}

import com.fasterxml.jackson.annotation.{JsonSubTypes, JsonTypeInfo}
import com.fasterxml.jackson.core.JsonParser.NumberType
@@ -228,6 +228,12 @@ class JsonSchemaGenerator

      val minAndMaxLength:Option[MinAndMaxLength] = currentProperty.flatMap {
        p =>
          // Look for @Pattern
          Option(p.getAnnotation(classOf[Pattern])).map {
            pattern =>
              node.put("pattern", pattern.regexp())
          }

          // Look for @Size
          Option(p.getAnnotation(classOf[Size]))
              .map {
+14 −6
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@ package com.kjetland.jackson.jsonSchema
import java.time.{LocalDate, LocalDateTime, OffsetDateTime}
import java.util
import java.util.{Optional, TimeZone}
import javax.validation.constraints.{Max, Min, NotNull, Size}
import javax.validation.constraints.{Pattern, Max, Min, NotNull, Size}

import com.fasterxml.jackson.annotation.{JsonProperty, JsonSubTypes, JsonTypeInfo, JsonValue}
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
@@ -77,7 +77,7 @@ class JsonSchemaGeneratorTest extends FunSuite with Matchers {
      node =>
        val r = schemaValidator.validate(node)
        if ( !r.isSuccess ) {
          throw new Exception("json does not validate agains schema: " + r)
          throw new Exception("json does not validate against schema: " + r)
        }

    }
@@ -609,16 +609,18 @@ class JsonSchemaGeneratorTest extends FunSuite with Matchers {
    val schema = generateAndValidateSchema(jsonSchemaGeneratorScalaHTML5, testData.classUsingValidation.getClass, Some(jsonNode))

    assert(schema.at("/properties/stringUsingNotNull/minLength").asInt() == 1)
    assert(schema.at("/properties/stringUsingNotNull/maxLength").isMissingNode == true)
    assert(schema.at("/properties/stringUsingNotNull/maxLength").isMissingNode)

    assert(schema.at("/properties/stringUsingSize/minLength").asInt() == 1)
    assert(schema.at("/properties/stringUsingSize/maxLength").asInt() == 20)

    assert(schema.at("/properties/stringUsingSizeOnlyMin/minLength").asInt() == 1)
    assert(schema.at("/properties/stringUsingSizeOnlyMin/maxLength").isMissingNode == true)
    assert(schema.at("/properties/stringUsingSizeOnlyMin/maxLength").isMissingNode)

    assert(schema.at("/properties/stringUsingSizeOnlyMax/maxLength").asInt() == 30)
    assert(schema.at("/properties/stringUsingSizeOnlyMax/minLength").isMissingNode == true)
    assert(schema.at("/properties/stringUsingSizeOnlyMax/minLength").isMissingNode)

    assert(schema.at("/properties/stringUsingPattern/pattern").asText() == "_stringUsingPatternA|_stringUsingPatternB")

    assert(schema.at("/properties/intMin/minimum").asInt() == 1)
    assert(schema.at("/properties/intMax/maximum").asInt() == 10)
@@ -714,7 +716,10 @@ trait TestData {
  val pojoUsingFormat = new PojoUsingFormat("test@example.com", true, OffsetDateTime.now(), OffsetDateTime.now())
  val manyDates = ManyDates(LocalDateTime.now(), OffsetDateTime.now(), LocalDate.now(), org.joda.time.LocalDate.now())

  val classUsingValidation = ClassUsingValidation("_stringUsingNotNull", "_stringUsingSize", "_stringUsingSizeOnlyMin", "_stringUsingSizeOnlyMax", 1, 2, 1.0, 2.0 )
  val classUsingValidation = ClassUsingValidation(
    "_stringUsingNotNull", "_stringUsingSize", "_stringUsingSizeOnlyMin", "_stringUsingSizeOnlyMax", "_stringUsingPatternA",
    1, 2, 1.0, 2.0
  )
}


@@ -784,6 +789,9 @@ case class ClassUsingValidation
  @Size(max=30)
  stringUsingSizeOnlyMax:String,

  @Pattern(regexp = "_stringUsingPatternA|_stringUsingPatternB")
  stringUsingPattern:String,

  @Min(1)
  intMin:Int,
  @Max(10)