{"id":24370331,"url":"https://github.com/bitlap/validation-scala","last_synced_at":"2025-09-29T07:30:26.324Z","repository":{"id":206896175,"uuid":"717437254","full_name":"bitlap/validation-scala","owner":"bitlap","description":"Jakarta Bean Validation 3.0 for Scala. （Bean校验+编译期植入参数校验）","archived":false,"fork":false,"pushed_at":"2024-12-19T13:43:32.000Z","size":248,"stargazers_count":4,"open_issues_count":4,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-12-19T14:44:31.227Z","etag":null,"topics":["bean-validation","bean-validation-scala","hibernate-validator","jakarta-bean-validation"],"latest_commit_sha":null,"homepage":"","language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bitlap.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":"docs/support-annotations.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-11-11T13:41:19.000Z","updated_at":"2024-12-19T13:43:37.000Z","dependencies_parsed_at":null,"dependency_job_id":"cc20e6b6-b9ef-4d40-8148-c3eb97190e43","html_url":"https://github.com/bitlap/validation-scala","commit_stats":null,"previous_names":["bitlap/validation-scala"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitlap%2Fvalidation-scala","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitlap%2Fvalidation-scala/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitlap%2Fvalidation-scala/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitlap%2Fvalidation-scala/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bitlap","download_url":"https://codeload.github.com/bitlap/validation-scala/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234598849,"owners_count":18858179,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bean-validation","bean-validation-scala","hibernate-validator","jakarta-bean-validation"],"created_at":"2025-01-19T04:24:11.136Z","updated_at":"2025-09-29T07:30:20.855Z","avatar_url":"https://github.com/bitlap.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"# validation-scala\n\nJakarta Bean Validation 3.0 for Scala. \n\n[![Project stage][Badge-Stage]][Badge-Stage-Page] ![CI][Badge-CI] [![Nexus (Snapshots)][Badge-Snapshots]][Link-Snapshots] [![Sonatype Nexus (Releases)][Badge-Releases]][Link-Releases]\n\n## Features\n\n- Support Scala `3.x` and `2.13.x`, Java `11` and above\n- Support validate scala types, e.g. `Option`, `Seq`, `Set`, `Map`, `Vector`, etc\n- Support validate object\n- Support cascade validation\n- For Scala3, support for parameter validation, catching errors and allowing access to error\n\n## Installation\n\nAdd the following to `build.sbt`:\n```scala\nlibraryDependencies ++= Seq(\n  \"org.bitlap\" %% \"validation-scala-core\" % \"latest version\"\n)\n```\n\n## Validate Object\n\nStep 1. Add annotations to your case class:\n```scala\nimport jakarta.validation.constraints.Size\n\ncase class Person(\n  // @(Size @getter)(min = 4) also supports the getter method\n  @(Size @field)(min = 4)\n  name: Option[String]\n)\n```\n\nStep 2. Create validator by our library:\n```scala\nimport bitlap.validation.ScalaValidatorFactory\nimport bitlap.validation.ScalaClockProvider\n\nval validator = ScalaValidatorFactory.scalaValidator(new ScalaClockProvider)\n```\n\nStep 3. Validate a case class object:\n```scala\nval obj = Person(Some(\"abc\"))\nval violations = validator.validate(obj)\n\nif (violations.nonEmpty) {\n  println(\"Violations found!\")\n}\n```\n\n## Validate Method Parameters\n\nThis allows us to use it like SpringBoot. It does not support annotations with group parameters and only supports scala 3!\n\nAdd the following to `build.sbt`:\n```scala\nlibraryDependencies ++= Seq(\n  \"org.bitlap\" %% \"validation-scala-core\" % \"latest version\",\n  // \"org.bitlap\" %% \"validation-scala-ext\" % \"latest version\", // for zio\n)\nautoCompilerPlugins := true\naddCompilerPlugin(\"org.bitlap\" %% \"validation-scala-plugin\" % \"latest version\")\n```\n\n### Cascade Validation\n\nThen, checking code will be automatically inserted during compilation and may throw an `IllegalArgumentException` if the constraint checking fails.\n\nIf you do not wish to throw an exception directly, you should add a `bind: BindingResult` parameter to method:\n```scala\nimport jakarta.validation.Valid\nimport jakarta.validation.constraints.NotNull\n\ndef validatedTwoParams(@Valid person1: Person, @Valid person2: Person): String\n\ndef validatedOneParams(@Valid person1: Person): String\n\n// The plugin captures the `bind` parameters based on the type, so the name doesn't matter.\ndef validatedBindParams(@Valid person1: Person, bindingError: BindingResult = BindingResult.default): String\n\ndef validatedNotNullParams(@Valid @NotNull person1: Person): String\n```\n\n### Non-Cascade Validation\n\n```scala\nimport jakarta.validation.constraints.{ NotBlank, NotNull }\n\ndef validatedNotNullParams(@NotNull person1: Person): String\n\ndef validatedNotEmptyParam(@NotBlank name: String): String\n```\n\n### Limitation\n\n- Only instance methods of classes are supported due to the limitations of jakarta\n- Overloading methods with the same number of parameters are not supported.\n\n## Other information\n\n1. [Supported Annotations](./docs/support-annotations.md)\n2. [Normal Examples](./examples/src/main/scala/bitlap/validation/examples/PersonNormalService.scala)\n3. [ZIO Examples](./examples/src/main/scala/bitlap/validation/examples/PersonZioService.scala)\n\n## Inspired by\n\n[bean-validation-scala](https://github.com/bean-validation-scala/bean-validation-scala), JSR 303 and 349 Bean Validation for Scala.\n\n\n[Badge-Stage]: https://img.shields.io/badge/Project%20Stage-Experimental-orange.svg\n[Badge-Stage-Page]: https://github.com/bitlap/bitlap/wiki/Project-Stages\n\n[Badge-CI]: https://github.com/bitlap/validation-scala/actions/workflows/scala.yml/badge.svg\n[Badge-Snapshots]: https://img.shields.io/nexus/s/org.bitlap/validation-scala-core_3?server=https%3A%2F%2Fs01.oss.sonatype.org\n[Link-Snapshots]: https://s01.oss.sonatype.org/content/repositories/snapshots/org/bitlap/validation-scala-core_3/\n\n[Badge-Releases]: https://img.shields.io/nexus/r/org.bitlap/validation-scala-core_3?server=https%3A%2F%2Fs01.oss.sonatype.org\n[Link-Releases]: https://s01.oss.sonatype.org/content/repositories/releases/org/bitlap/validation-scala-core_3/","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbitlap%2Fvalidation-scala","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbitlap%2Fvalidation-scala","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbitlap%2Fvalidation-scala/lists"}