Spring Boot项目中动态生成带校验规则JSON Schema的库推荐请求
适合Spring Boot动态对象的JSON Schema生成库推荐
以下几个库可以满足你无需预先知晓属性,直接基于动态对象生成带校验规则的JSON Schema的需求:
1. Jackson JsonSchema Module
作为Jackson生态的一部分,它能直接基于对象实例或Class生成Schema,完美适配动态对象场景。
- 依赖引入(Maven):
<dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-jsonSchema</artifactId> <version>2.15.2</version> <!-- 匹配你的Jackson版本 --> </dependency> - 基础用法:
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.module.jsonSchema.JsonSchema; import com.fasterxml.jackson.module.jsonSchema.JsonSchemaGenerator; // 假设dynamicObj是你的动态对象(比如Map<String, Object>或动态生成的Bean) Object dynamicObj = ...; ObjectMapper mapper = new ObjectMapper(); JsonSchemaGenerator schemaGen = new JsonSchemaGenerator(mapper); JsonSchema schema = schemaGen.generateSchema(dynamicObj.getClass()); // 输出格式化后的Schema JSON String schemaJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(schema); - 校验规则支持:自动根据属性类型生成基础校验(如字符串、数字、布尔等类型约束),还能识别对象的必填属性、默认值等。如需自定义规则,可通过扩展
JsonSchemaGenerator或添加Jackson注解实现。
2. VicTools JSON Schema Generator
这是一个专注于JSON Schema生成的工具库,配置灵活,支持自定义校验规则批量应用到动态属性上。
- 依赖引入(Maven):
<dependency> <groupId>com.github.victools</groupId> <artifactId>jsonschema-generator</artifactId> <version>4.21.0</version> </dependency> - 基础用法:
import com.github.victools.jsonschema.generator.SchemaGenerator; import com.github.victools.jsonschema.generator.SchemaGeneratorConfig; import com.github.victools.jsonschema.generator.SchemaGeneratorConfigBuilder; import com.github.victools.jsonschema.generator.SchemaVersion; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; // 配置Schema版本(如DRAFT_2020_12) SchemaGeneratorConfigBuilder configBuilder = new SchemaGeneratorConfigBuilder(SchemaVersion.DRAFT_2020_12); SchemaGeneratorConfig config = configBuilder.build(); SchemaGenerator generator = new SchemaGenerator(config); // 生成Schema,支持动态对象的Class JsonNode schemaNode = generator.generateSchema(dynamicObj.getClass()); // 转成JSON字符串 String schemaJson = new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(schemaNode); - 自定义校验规则:比如给所有字符串属性添加长度限制,只需在配置Builder中添加规则:
configBuilder.forFields() .withStringMinLength(1) .withStringMaxLength(100);
3. Apache Commons JSON Schema Generator
轻量级库,适合快速生成基础Schema,支持Map等动态结构。
- 依赖引入(Maven):
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-json-schema-generator</artifactId> <version>1.0.0</version> </dependency> - 基础用法:
import org.apache.commons.json.JsonSchema; import org.apache.commons.json.JsonSchemaGenerator; JsonSchemaGenerator generator = new JsonSchemaGenerator(); JsonSchema schema = generator.generateSchema(dynamicObj); String schemaJson = schema.toString(); - 特点:自动识别属性类型生成基础校验规则,无需复杂配置,适合简单场景。
注意事项
- 如果动态对象是
Map<String, Object>类型,上述库均能直接根据Map中值的类型生成对应校验规则。 - 若为CGLIB等动态生成的Bean类,只要能通过反射获取属性信息,这些库都能正常生成Schema。
内容的提问来源于stack exchange,提问作者wikipep
相关产品推荐
相关产品推荐

