finaglehelper on develop
finatra: Support for injecting … (compare)
finaglehelper on develop
finatra-thrift: Reduce complexi… (compare)
finaglehelper on develop
finatra-thrift: Use correct dat… (compare)
finaglehelper on develop
finatra-thrift: CommonThriftLog… (compare)
finaglehelper on develop
finagle, finatra, ts: Keep `inc… (compare)
finaglehelper on develop
finatra: Add comments for optim… (compare)
finaglehelper on develop
finatra-doc: Add missing import… (compare)
finaglehelper on develop
inject-core: Remove finagle-cor… (compare)
finaglehelper on develop
finatra: Use permanent links fo… (compare)
finaglehelper on develop
util|scrooge|finagle|twitter-se… (compare)
finaglehelper on develop
finatra: Update testing docs P… (compare)
Hi all,
According to the docs, the integrated ScalaValidator should check constraints on fields marked optional.
However, when I try to deserialize and validate using the ScalaObjectMapper, I get an error:
No validator could be found for constraint 'interface jakarta.validation.constraints.Min' validating type 'scala.Option'. Check configuration for 'Car.towing_capacity'
jakarta.validation.UnexpectedTypeException: No validator could be found for constraint 'interface jakarta.validation.constraints.Min' validating type 'scala.Option'. Check configuration for 'Car.towing_capacity'
at com.twitter.util.validation.ScalaValidator.isValid(ScalaValidator.scala:1333)
at com.twitter.util.validation.ScalaValidator.isValidOption(ScalaValidator.scala:1373)
at com.twitter.util.validation.ScalaValidator.isValid(ScalaValidator.scala:1295)
at com.twitter.util.validation.ScalaValidator.isValid(ScalaValidator.scala:1276)
at com.twitter.util.validation.ScalaValidator.validateField(ScalaValidator.scala:1007)
at com.twitter.util.validation.ScalaValidator.validateExecutableParameters(ScalaValidator.scala:899)
at com.twitter.util.validation.ScalaValidator.validateExecutableParameters(ScalaValidator.scala:694)
at com.twitter.util.jackson.caseclass.CaseClassDeserializer$.executeFieldValidations(CaseClassDeserializer.scala:92)
If I call the Scala Validator directly, it works. Is this a known bug or do I have something misconfigured? I'm on Finatra 21.11.0
Example code to reproduce
import com.twitter.util.jackson.ScalaObjectMapper
import com.twitter.util.validation.ScalaValidator
import jakarta.validation.constraints.Min
import org.scalatest.funsuite.AnyFunSuite
case class Car(@Min(1000) towingCapacity: Option[Int] = None)
class ValidationTest extends AnyFunSuite {
private val mapper = ScalaObjectMapper.builder.objectMapper
private val validator = ScalaValidator()
test("check constraints") {
// This works
val car = Car(Some(100))
validator.validate(car)
// This throws an error
val json = """{ "towing_capacity": 100 }"""
val result = mapper.parse[Car](json)
}
}