https://github.com/bitlap/validation-scala
Jakarta Bean Validation 3.0 for Scala. (Bean校验+编译期植入参数校验)
https://github.com/bitlap/validation-scala
bean-validation bean-validation-scala hibernate-validator jakarta-bean-validation
Last synced: 5 months ago
JSON representation
Jakarta Bean Validation 3.0 for Scala. (Bean校验+编译期植入参数校验)
- Host: GitHub
- URL: https://github.com/bitlap/validation-scala
- Owner: bitlap
- License: mit
- Created: 2023-11-11T13:41:19.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2024-12-19T13:43:32.000Z (6 months ago)
- Last Synced: 2024-12-19T14:44:31.227Z (6 months ago)
- Topics: bean-validation, bean-validation-scala, hibernate-validator, jakarta-bean-validation
- Language: Scala
- Homepage:
- Size: 242 KB
- Stars: 4
- Watchers: 3
- Forks: 2
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Support: docs/support-annotations.md
Awesome Lists containing this project
README
# validation-scala
Jakarta Bean Validation 3.0 for Scala.
[![Project stage][Badge-Stage]][Badge-Stage-Page] ![CI][Badge-CI] [![Nexus (Snapshots)][Badge-Snapshots]][Link-Snapshots] [![Sonatype Nexus (Releases)][Badge-Releases]][Link-Releases]
## Features
- Support Scala `3.x` and `2.13.x`, Java `11` and above
- Support validate scala types, e.g. `Option`, `Seq`, `Set`, `Map`, `Vector`, etc
- Support validate object
- Support cascade validation
- For Scala3, support for parameter validation, catching errors and allowing access to error## Installation
Add the following to `build.sbt`:
```scala
libraryDependencies ++= Seq(
"org.bitlap" %% "validation-scala-core" % "latest version"
)
```## Validate Object
Step 1. Add annotations to your case class:
```scala
import jakarta.validation.constraints.Sizecase class Person(
// @(Size @getter)(min = 4) also supports the getter method
@(Size @field)(min = 4)
name: Option[String]
)
```Step 2. Create validator by our library:
```scala
import bitlap.validation.ScalaValidatorFactory
import bitlap.validation.ScalaClockProviderval validator = ScalaValidatorFactory.scalaValidator(new ScalaClockProvider)
```Step 3. Validate a case class object:
```scala
val obj = Person(Some("abc"))
val violations = validator.validate(obj)if (violations.nonEmpty) {
println("Violations found!")
}
```## Validate Method Parameters
This allows us to use it like SpringBoot. It does not support annotations with group parameters and only supports scala 3!
Add the following to `build.sbt`:
```scala
libraryDependencies ++= Seq(
"org.bitlap" %% "validation-scala-core" % "latest version",
// "org.bitlap" %% "validation-scala-ext" % "latest version", // for zio
)
autoCompilerPlugins := true
addCompilerPlugin("org.bitlap" %% "validation-scala-plugin" % "latest version")
```### Cascade Validation
Then, checking code will be automatically inserted during compilation and may throw an `IllegalArgumentException` if the constraint checking fails.
If you do not wish to throw an exception directly, you should add a `bind: BindingResult` parameter to method:
```scala
import jakarta.validation.Valid
import jakarta.validation.constraints.NotNulldef validatedTwoParams(@Valid person1: Person, @Valid person2: Person): String
def validatedOneParams(@Valid person1: Person): String
// The plugin captures the `bind` parameters based on the type, so the name doesn't matter.
def validatedBindParams(@Valid person1: Person, bindingError: BindingResult = BindingResult.default): Stringdef validatedNotNullParams(@Valid @NotNull person1: Person): String
```### Non-Cascade Validation
```scala
import jakarta.validation.constraints.{ NotBlank, NotNull }def validatedNotNullParams(@NotNull person1: Person): String
def validatedNotEmptyParam(@NotBlank name: String): String
```### Limitation
- Only instance methods of classes are supported due to the limitations of jakarta
- Overloading methods with the same number of parameters are not supported.## Other information
1. [Supported Annotations](./docs/support-annotations.md)
2. [Normal Examples](./examples/src/main/scala/bitlap/validation/examples/PersonNormalService.scala)
3. [ZIO Examples](./examples/src/main/scala/bitlap/validation/examples/PersonZioService.scala)## Inspired by
[bean-validation-scala](https://github.com/bean-validation-scala/bean-validation-scala), JSR 303 and 349 Bean Validation for Scala.
[Badge-Stage]: https://img.shields.io/badge/Project%20Stage-Experimental-orange.svg
[Badge-Stage-Page]: https://github.com/bitlap/bitlap/wiki/Project-Stages[Badge-CI]: https://github.com/bitlap/validation-scala/actions/workflows/scala.yml/badge.svg
[Badge-Snapshots]: https://img.shields.io/nexus/s/org.bitlap/validation-scala-core_3?server=https%3A%2F%2Fs01.oss.sonatype.org
[Link-Snapshots]: https://s01.oss.sonatype.org/content/repositories/snapshots/org/bitlap/validation-scala-core_3/[Badge-Releases]: https://img.shields.io/nexus/r/org.bitlap/validation-scala-core_3?server=https%3A%2F%2Fs01.oss.sonatype.org
[Link-Releases]: https://s01.oss.sonatype.org/content/repositories/releases/org/bitlap/validation-scala-core_3/