Back to results
ivangreene/java-to-zod(opens in a new tab)
Language: Java
Convert POJOs to Zod schemas
- stars
- 24
- watchers
- 1
- forks
- 2
- open issues
- 10
- Last updated
- 02/10/2025
Language: Java
Convert POJOs to Zod schemas
Convert POJOs to Zod schemas. Uses JSR-380 (bean validation) annotations to specify the constraints.
Write your schemas once, and use them for both frontend and backend validation.
public class Person { @NotEmpty(message = "must not be empty") public String givenName; @NotEmpty public String surname; @Positive(message = "must be positive") public int age; @Email(message = "must be a valid email") public String email; @NotNull public AccountType accountType; } enum AccountType { PREMIUM, STANDARD, BASIC, }
Running the java-to-zod plugin will give you:
const PersonSchema = zod.object({ givenName: zod.string().min(1, { message: 'must not be empty' }), surname: zod.string().min(1), age: zod.number().int().positive({ message: 'must be positive' }), email: zod.string().email({ message: 'must be a valid email' }).optional().nullable(), accountType: zod.enum(['PREMIUM', 'STANDARD', 'BASIC']), });
Goes well with typescript-generator, and shares many of the same configuration options for scanning source classes.
<plugin> <groupId>sh.ivan</groupId> <artifactId>java-to-zod-maven-plugin</artifactId> <version>VERSION</version> <configuration> <jsonLibrary>jackson2</jsonLibrary> <outputFile>${project.basedir}/../frontend/generated-schemas.js</outputFile> <classPatterns> <classPattern>sh.ivan.pojo.**</classPattern> </classPatterns> </configuration> <executions> <execution> <id>generate</id> <goals> <goal>generate</goal> </goals> <phase>process-classes</phase> </execution> </executions> </plugin>
See plugin configuration docs for all configuration properties.
/i)/m)/s)