如何在Spring Boot中使用jsonschema2pojo排除JSON Schema中的指定字段?
解决JSON Schema生成POJO时排除字段的问题
针对jsonschema2pojo的临时解决方案
虽然jsonschema2pojo官方不支持直接排除字段,但可以通过以下几种方式绕过:
1. 预处理JSON Schema文件
直接复制原始Schema,手动删除不需要的字段,用修改后的Schema作为生成POJO的输入。如果需要自动化,可借助Maven的maven-resources-plugin配合文本替换工具(如sed),在构建阶段动态移除目标字段。
2. 自定义注解生成器
利用jsonschema2pojo的扩展机制,给Schema中要排除的字段添加自定义属性,再编写自定义Annotator自动给生成的字段加上@JsonIgnore注解:
步骤1:在JSON Schema中标记要排除的字段
{ "type": "object", "properties": { "id": {"type": "string"}, "sensitiveField": { "type": "string", "x-ignore": true } } }
步骤2:编写自定义Annotator类
import com.fasterxml.jackson.annotation.JsonIgnore; import com.sun.codemodel.JDefinedClass; import com.sun.codemodel.JFieldVar; import org.jsonschema2pojo.AbstractAnnotator; import org.json.JSONObject; public class IgnoreFieldAnnotator extends AbstractAnnotator { @Override public void propertyField(JFieldVar field, JDefinedClass clazz, String propertyName, JSONObject propertyNode) { if (propertyNode.has("x-ignore") && propertyNode.getBoolean("x-ignore")) { field.annotate(JsonIgnore.class); } } }
步骤3:在Maven插件中配置自定义Annotator
<plugin> <groupId>org.jsonschema2pojo</groupId> <artifactId>jsonschema2pojo-maven-plugin</artifactId> <version>1.2.1</version> <configuration> <sourceDirectory>${project.basedir}/src/main/resources/schemas</sourceDirectory> <targetPackage>com.example.pojo</targetPackage> <annotator>com.example.IgnoreFieldAnnotator</annotator> </configuration> <executions> <execution> <goals> <goal>generate</goal> </goals> </execution> </executions> </plugin>
3. 生成后批量修改
如果上述方法都嫌麻烦,也可以在POJO生成后,用脚本(如Java反射、Groovy脚本)批量给指定字段添加@JsonIgnore注解,不过这种方式维护性较差,仅适合临时场景。
支持字段排除的替代库
如果不想折腾workaround,可以考虑这些原生支持字段过滤的库:
- OpenAPI Generator:若你的JSON Schema遵循OpenAPI规范,该工具的Maven插件可通过
excludeFields或excludeModels配置项直接排除指定字段或模型,配置灵活且功能强大。 - Apache Avro:虽主要用于Avro Schema,但也支持JSON Schema转POJO,可通过Schema定义时的字段配置实现排除(如标记字段为废弃或不生成)。
- Codegen4j:轻量级代码生成工具,支持JSON Schema转POJO,提供字段包含/排除的配置选项,适合简单场景。
内容的提问来源于stack exchange,提问作者sub
相关产品推荐
相关产品推荐

