GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - bufbuild/protovalidate-java: Protocol Buffer Validation for Java.

BranchesTags
Open more actions menu

Latest commit

 

History

474 Commits
474 Commits

Folders and files

NameName
Last commit message
Last commit date
.github
.github
 
 
benchmarks
benchmarks
 
 
conformance
conformance
 
 
gradle
gradle
 
 
src
src
 
 
.editorconfig
.editorconfig
 
 
.gitignore
.gitignore
 
 
LICENSE
LICENSE
 
 
Makefile
Makefile
 
 
README.md
README.md
 
 
buf.gen.yaml
buf.gen.yaml
 
 
buf.yaml
buf.yaml
 
 
build.gradle.kts
build.gradle.kts
 
 
gradle.properties
gradle.properties
 
 
gradlew
gradlew
 
 
gradlew.bat
gradlew.bat
 
 
settings.gradle.kts
settings.gradle.kts
 
 

Repository files navigation

The Buf logo

protovalidate-java

CI Conformance BSR

Protovalidate is the semantic validation library for Protobuf. It provides standard annotations to validate common rules on messages and fields, as well as the ability to use CEL to write custom rules. It's the next generation of protoc-gen-validate.

With Protovalidate, you can annotate your Protobuf messages with both standard and custom validation rules:

syntax = "proto3";

package acme.user.v1;

import "buf/validate/validate.proto";

message User {
  string id = 1 [(buf.validate.field).string.uuid = true];
  uint32 age = 2 [(buf.validate.field).uint32.lte = 150]; // We can only hope.
  string email = 3 [(buf.validate.field).string.email = true];
  string first_name = 4 [(buf.validate.field).string.max_len = 64];
  string last_name = 5 [(buf.validate.field).string.max_len = 64];

  option (buf.validate.message).cel = {
    id: "first_name_requires_last_name"
    message: "last_name must be present if first_name is present"
    expression: "!has(this.first_name) || has(this.last_name)"
  };
}

Once you've added protovalidate-java to your project, validation is idiomatic Java:

ValidationResult result = validator.validate(message);
if (!result.isSuccess()) {
    // Handle failure.
}

Installation

Tip

The easiest way to get started with Protovalidate for RPC APIs are the quickstarts in Buf's documentation. There's one available for Java and gRPC.

protovalidate-java is listed in Maven Central, which provides installation snippets for Gradle, Maven, and other package managers. In Gradle, it's:

dependencies {
    implementation 'build.buf:protovalidate:<version>'
}

Documentation

Comprehensive documentation for Protovalidate is available at protovalidate.com.

Highlights for Java developers include:

  • The developer quickstart
  • A comprehensive RPC quickstart for Java and gRPC
  • A migration guide for protoc-gen-validate users

Native rule evaluators (opt-out)

The standard rules can be evaluated either through CEL or through native Java code. Native evaluation is functionally identical (the conformance suite passes in both modes) but skips CEL compilation and runtime overhead for the rules it covers — a single validate() call on a complex message can run an order of magnitude faster and allocate ~10× less.

Native rules are opt-out. Disable them by configuring the validator:

Config config = Config.newBuilder().setEnableNativeRules(false).build();
Validator validator = ValidatorFactory.newBuilder().withConfig(config).build();

Forward compatibility is preserved by a clone-and-clear contract: when protovalidate adds a new rule that this codebase hasn't yet implemented natively, the rule remains on the residual FieldRules and CEL enforces it. Native evaluation is an optimization, never a replacement.

Additional languages and repositories

Protovalidate isn't just for Java! You might be interested in sibling repositories for other languages:

  • protovalidate-go (Go)
  • protovalidate-python (Python)
  • protovalidate-cc (C++)
  • protovalidate-es (TypeScript and JavaScript)

Additionally, protovalidate's core repository provides:

  • Protovalidate's Protobuf API
  • Conformance testing utilities for acceptance testing of protovalidate implementations

Contributing

We genuinely appreciate any help! If you'd like to contribute, check out these resources:

  • Contributing Guidelines: Guidelines to make your contribution process straightforward and meaningful
  • Conformance testing utilities: Utilities providing acceptance testing of protovalidate implementations

Legal

Offered under the Apache 2 license.

About

Protocol Buffer Validation for Java.

protovalidate.com

Resources

Readme
Apache-2.0 license

Code of conduct

Code of conduct

Contributing

Contributing
Activity
Custom properties

Stars

70 stars

Watchers

7 watching

Forks

18 forks
Report repository

Releases

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.